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

SQL results for all rows between two dates

我遇到了 SQL 查询。

我有这样的情况:在bookingstable。我有两个简单的 DATETIMEdate_startdate_end,我有两个日期选择器,用户可以在其中 select 这两个日期和值,我们应该调用 dp_date_startdp_date_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 <= end_date AND start_date >= dp_date_end

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

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