2011-09-21 12 views
-1

예약 시스템이 있습니다. 특정 TimeSpan에 RoomStatus를 많이 넣을 수 있습니까?SQL Server의 시간 범위

ex. 오후 7시 -

ArrivalDate : 09-21-2011 4:00pm 

    NumberOfHours : 3 

    DepartureDate : 09-21-2011 7:00pm 

    RoomNo : 10 

    RoomStatus : Reserved 

나는 RoomNo 10 만 4시 사이 RESERVED의 상태를 가지고 싶어?

아이디어가 있으십니까?

나는 이런 식으로 쿼리를 변환하는 SQL Server 2008 및 VS 2010

편집

***RESERVATION TABLE*** 
PK-ReservationNo  bigint 
FK-ReservationTypeID int 
PK-ClientID   bigint 
FK-RoomNo    int 
NoOfPersons   int 
NoOfHours    int 
ArrivalDate  smalldatetime 
DepartureDate  smalldatetime 

***ROOM TABLE*** 
PK-RoomNo   int 
FK-RoomTypeNo  int 
FK-RoomStatusId  int 
+2

기록에 (모두'datetime') ... –

+0

는 예, 도착 및 출발 시간은이다 들어가기와 빼기 .. 오후 7시 이후에 방 10은 예약되지 않았다고 어떻게 말할 수 있습니까? – TheOxblood

+0

데이터 표는 어떤 모양입니까? 예를 들어 주어진 시간대의 모든 "무료"방을 제공한다는 쿼리를 원하십니까? – Magnus

답변

0

시도를 사용하고 있습니다;

if datediff(hour, ArrivalDate, DepartureDate) > NumberOfHours 
update('Empty') 
else 
update ('Reserved') 
+0

SELECT * FROM 예약 어디서 DateDiff (시간, 도착 날짜, 출발일)> NoOfHours 이 맞습니까? – TheOxblood

+0

네, 그 정확한 찾고 – xenedia

+0

하지만 그것이 올바른지 아닌지 생각합니다. 왜냐하면 오후 7시 이후에 Room10을 계속보고 싶기 때문입니다. 4 : 00-7 : 00 사이에만 사용할 수 없습니다 – TheOxblood

0

이 당신이 원하는 것을 할 수 있습니다 상영/ENDTIME 쌍의 일종으로

DECLARE @StartDate DateTime = '2011-01-01 12:00' 
DECLARE @EndDate DateTime = '2011-01-01 15:00' 

--Free rooms between 12:00 and 15:00 
SELECT * 
FROM Room 
WHERE NOT EXISTS(
    SELECT NULL 
    FROM 
     Reservation 
    WHERE 
     ((ArrivalDate > @StartDate AND ArrivalDate < @EndDate) OR 
     (DepartureDate > @StartDate AND DepartureDate < @EndDate))) AND 
     Reservation.FK-RoomNo = Room.PK-RoomNo) 
+0

잠시 기다려주세요. 나는 이것을 시도 할 것입니다! :) BTW, startdatetime 및 enddatetime은 VS2010에서 온 것입니다. – TheOxblood

+0

FREEROOMS BET 12시 - 15 시까지는 무엇을 의미합니까? 12:00 - 15:00 예약이있는 방을 제외하고는 이용 가능한 모든 객실을보고 싶습니다. 나의 호텔은 btw 호스텔! – TheOxblood

+0

그것이 의미하는 바입니다. – Magnus