两个日期之间的所有行的SQL结果



我被一个SQL查询卡住了。

我有这样一个情况:在bookings表中。我有两个简单的DATETIMEdate_startdate_end,我有两个日期选择器,用户可以从中选择这两个日期和值,我们应该称之为dp_date_startdp_date_end

结果集中的行需要符合以下条件:

  • 如果date_startdate_end完全在这个范围内
  • 如果只有date_startdate_end在该范围内
  • 如果date_startdate_end是边框值

基本上这是一个预订逻辑,想象一下,如果一个房间已经有人了,就不能预订了。

我已经试过了:

SELECT * 
FROM bookings 
WHERE 'dp_date_start' BETWEEN start_date AND end_date 
OR 'dp_date_end' BETWEEN start_date AND end_date 
OR start_date BETWEEN 'dp_date_start' AND 'dp_date_end' 
OR end_date BETWEEN 'dp_date_start' AND 'dp_date_end';

但如果失败,即'dp_date_start'等于end_date

提前感谢!

您有两个开始日期和两个结束日期。您可以检查两个开始日期是否在两个时间段之间,如下所示:

SELECT * FROM bookings 
WHERE dp_date_start between start_date AND end_date 
OR start_date BETWEEN dp_date_start and dp_date_end

这里有一个很好的解释来解决您的问题。https://stackoverflow.com/a/325964/1500601。很好地解释了找到这种重叠的逻辑。

您可以根据此逻辑修改查询。实现可能是这样的:

SELECT * FROM bookings WHERE dp_date_start <= end_date AND start_date >= dp_date_end

相关内容

  • 没有找到相关文章

最新更新