SQL 两个日期之间所有行的结果
SQL results for all rows between two dates
我遇到了 SQL 查询。
我有这样的情况:在bookings
table。我有两个简单的 DATETIME
列 date_start
和 date_end
,我有两个日期选择器,用户可以在其中 select 这两个日期和值,我们应该调用 dp_date_start
和 dp_date_end
.
结果集中的行需要符合以下条件:
- 如果
date_start
和 date_end
完全在该范围内
- 如果只有
date_start
或 date_end
在该范围内
- 如果
date_start
或 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
我遇到了 SQL 查询。
我有这样的情况:在bookings
table。我有两个简单的 DATETIME
列 date_start
和 date_end
,我有两个日期选择器,用户可以在其中 select 这两个日期和值,我们应该调用 dp_date_start
和 dp_date_end
.
结果集中的行需要符合以下条件:
- 如果
date_start
和date_end
完全在该范围内 - 如果只有
date_start
或date_end
在该范围内 - 如果
date_start
或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