-1

我有一个包含开始和结束字段的表,其值如下:

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'

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

我试图找到与数据库中值的开始和结束重叠的任何行。

4

1 回答 1

1

查看数据库中的条目和您正在使用的查询,您似乎实际上是在寻找日期间隔重叠查询,即检查是否以某种方式[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
于 2021-09-21T12:00:11.857 回答