Select 其中日期时间开始大于并且结束小于

Select where datetime start greater than and end less than

我有一个 table,开始和结束字段的值如下:

start               | end
2021-09-24 17:00:00 | 2021-10-01 08:00:00

我一头雾水,想不通为什么这个语句没有结果:

SELECT *
FROM `oncall`
WHERE `start` >= '2021-10-01 02:00:00'
AND   `end`   <= '2021-10-01 08:00:00'

尽管我的示例行中的日期范围包含上述范围。

我正在尝试查找与数据库中值的开始和结束重叠的任何行。

查看您数据库中的条目和您正在使用的查询,您似乎实际上是在寻找日期间隔 overlap 查询即检查 [2021-10-01 02:00:00, 2021-10-01 08:00:00) 是否以某种方式重叠 [2021-09-24 17:00:00, 2021-10-01 08:00:00) 的查询。

SELECT *
FROM `oncall`
WHERE @d2 > `start` AND `end` > @d1

-- replace @d1 and @d2 with actual values

请注意,此查询适用于所有类型的重叠。例如,如果您的数据库中有这对日期:

2021-10-11 | 2021-10-15

那么所有这些输入对都将匹配:

2021-10-01 | 2021-10-12
2021-10-14 | 2021-10-20
2021-10-01 | 2021-10-20
2021-10-11 | 2021-10-14