2011-09-21 77 views
-1

我有一个预订系统,在特定的TimeSpan中,我怎样才能获得很多RoomStatus?SQL Server的时间跨度

ex。

ArrivalDate : 09-21-2011 4:00pm 

    NumberOfHours : 3 

    DepartureDate : 09-21-2011 7:00pm 

    RoomNo : 10 

    RoomStatus : Reserved 

我希望房间号10的状态仅在4:00 - 7:00之间保留?

您有什么想法吗?

我使用SQL Server 2008和Visual Studio 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

是的,到达和出发时间是In and Out .. 我怎么说,晚上7点起,10号房间不保留? – TheOxblood

+0

你的数据表是什么样的?您是否想要一个查询,例如在给定的时间段内为您提供所有“免费”房间? – Magnus

回答

0

尝试将您的查询转换是这样;

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

SELECT * FROM Reservation WHERE DateDiff(hour,ArrivalDate,DepartureDate)> NoOfHours 这是正确的吗? – TheOxblood

+0

是的,它看起来是正确的 – xenedia

+0

但我认为这是不正确的,因为我想从晚上7点起,Room10仍然可用。它只在下午4:00-7:00之间不可用 – TheOxblood

0

这可能是你想要什么:

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

等一下,我会为此尝试! :) 顺便说一句,startdatetime和enddatetime将来自VS2010 – TheOxblood

+0

你是什么意思由FREEROOMS下注12:00-15:00? 我想看到所有可用的房间,除了一个房间的预订12:00-15:00 .. 我的酒店是一个旅馆btw! – TheOxblood

+0

这就是它的意思 – Magnus