我正在创建酒店预订应用程序,我希望用户检查特定日期范围是否可用,例如:
BookingID | StartingDate | EndDate
1 | 01/01/2014 | 10/01/2014
2 | 15/01/2014 | 20/01/2014
假设这些是我的预订表的记录。现在,用户想要检查此日期范围:
(假设酒店有一个房间)
StartingDate = 11/01/2014
EndDate = 19/01/2014
如您所见,此日期范围从15/01开始到20/01年不可用。
如何查看日期范围是否与现有记录中的任何日期范围不重叠?
答案 0 :(得分:2)
简单查询:
SELECT COUNT(BookingID)
FROM foo f
WHERE f.StartingDate < to_date('19/01/2014') AND f.EndDate > to_date('11/01/2014');
答案 1 :(得分:1)
您可以使用此逻辑:
select count(*) as NumOverlappingRecords
from booking b
where @StartingDate <= b.EndDate and
@EndDate >= b.startingDate;
您希望NumOverlappingRecords
成为0
,无冲突。