SQL查询时间范围重叠数据无返回结果的原因及正确写法求解
错误原因
你编写的SQL查询逻辑是筛选完全被查询时间范围[2021-10-01 02:00:00, 2021-10-01 08:00:00]包含的oncall记录,要求记录的开始时间晚于等于查询起始时间、结束时间早于等于查询结束时间。
而你给出的示例记录start值为2021-09-24 17:00:00,明显早于查询起始时间2021-10-01 02:00:00,不满足start >= '2021-10-01 02:00:00'的条件,因此不会被返回。
正确的时间范围重叠查询写法
两个时间段存在重叠的通用判定逻辑为:
- 记录的开始时间 < 查询的结束时间
- 记录的结束时间 > 查询的开始时间
如果业务规则中时间段首尾相接也算重叠(比如某记录结束时间和查询起始时间为同一时间就算重叠),可以把符号替换为<=和>=。
对应场景的SQL语句如下:
SELECT * FROM `oncall` WHERE `start` < '2021-10-01 08:00:00' AND `end` > '2021-10-01 02:00:00'; -- 首尾相接算重叠的版本 -- SELECT * -- FROM `oncall` -- WHERE `start` <= '2021-10-01 08:00:00' -- AND `end` >= '2021-10-01 02:00:00';
内容的提问来源于stack exchange,提问作者Blinkydamo
相关产品推荐
相关产品推荐

