帮助编写大厅预订日期可用性搜索查询
Posted
技术标签:
【中文标题】帮助编写大厅预订日期可用性搜索查询【英文标题】:Help in writing Query for hall booking date availability search 【发布时间】:2009-10-21 10:56:48 【问题描述】:我需要帮助编写查询以查找大厅预订系统的可用时间段。详细信息如下
我有一个存储大厅详细信息的 Hall 表和一个存储预订完成时间的 HallBooking 表。
大厅 - HallId - 名称
大厅预订 - HallBookingId - HallId - BookingPersonName - 开始日期时间 - 结束日期时间
用户可以通过指定开始日期时间和结束日期时间来搜索大厅可用性。查询应该选择并显示大厅在那个时间是否可用。
如果时间段不可用,则查询应选择当天具有相同持续时间的可用时间段并显示给用户。
提前致谢 安兹
【问题讨论】:
【参考方案1】:这是一个可以帮助您入门的测试脚本。
DECLARE @Hall TABLE
(
HallID INT PRIMARY KEY ,
HallName VARCHAR(1)
)
DECLARE @HallBooking TABLE
(
HallBookingID INT PRIMARY KEY ,
HallID INT ,
BookingPersonName VARCHAR(10) ,
StartDateTime DATETIME ,
EndDateTime DATETIME
)
INSERT @Hall
SELECT 1 ,
'A'
UNION ALL
SELECT 2 ,
'B'
UNION ALL
SELECT 3 ,
'C'
--TEST 1 Check for available Hall
DECLARE @HallID INT ,
@StartDateTime DATETIME ,
@EndDateTime DATETIME
DECLARE @Status VARCHAR(6)
SELECT @HallID = 1 ,
@StartDateTime = '20091021 8:00:00' ,
@EndDateTime = '20091021 12:00:00'
--INSERT TestReservationCode here
SELECT @Status = 'Open'
FROM @Hall h
WHERE h.HallID = @HallID
AND NOT EXISTS ( SELECT *
FROM @HallBooking hb
WHERE h.HallID = hb.HallID
AND ( @StartDateTime >= hb.StartDateTime
AND @StartDateTime < hb.EndDateTime
OR @EndDateTime > hb.StartDateTime
AND @EndDateTime <= hb.EndDateTime
) )
IF @Status IS NULL
BEGIN
SELECT @Status = 'Closed'
SELECT *
FROM @Hall h
WHERE h.HallID <> @HallID
AND NOT EXISTS ( SELECT *
FROM @HallBooking hb
WHERE h.HallID = hb.HallID
AND ( @StartDateTime >= hb.StartDateTime
AND @StartDateTime < hb.EndDateTime
OR @EndDateTime > hb.StartDateTime
AND @EndDateTime <= hb.EndDateTime
) )
END
SELECT @Status
要测试预订状态,请在上面的 INSERT 注释下方插入以下代码并重新运行。
--TestReservationCode
INSERT INTO @HallBooking
( HallBookingID ,
HallID ,
BookingPersonName ,
StartDateTime ,
EndDateTime
)
VALUES ( 1 , -- HallBookingID - int
1 , -- HallID - int
'Stuart' , -- BookingPersonName - varchar(10)
'2009-10-21 10:00' , -- StartDateTime - datetime
'2009-10-21 12:00' -- EndDateTime - datetime
)
INSERT INTO @HallBooking
( HallBookingID ,
HallID ,
BookingPersonName ,
StartDateTime ,
EndDateTime
)
VALUES ( 2 , -- HallBookingID - int
2 , -- HallID - int
'Stuart' , -- BookingPersonName - varchar(10)
'2009-10-21 10:00' , -- StartDateTime - datetime
'2009-10-21 12:00' -- EndDateTime - datetime
)
【讨论】:
以上是关于帮助编写大厅预订日期可用性搜索查询的主要内容,如果未能解决你的问题,请参考以下文章