检查特定日期是否重叠表中的任何范围

时间:2014-12-19 18:23:11

标签: mysql date

我正在创建酒店预订应用程序,我希望用户检查特定日期范围是否可用,例如:

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年不可用。

如何查看日期范围是否与现有记录中的任何日期范围不重叠?

2 个答案:

答案 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,无冲突。