MySQL查询开始时间落在指定时间区间内的记录SQL写法
MySQL时间区间匹配查询实现
基础信息
- 目标表字段:
id、Start Time、End Time,字段存储类型为TIME - 样例数据:
- id=1:时段06:30:00-07:00:00
- id=2:时段06:45:00-07:15:00
- id=3:时段13:15:00-14:00:00
- id=4:时段09:30:00-10:15:00
- 查询区间:05:00:00 - 10:00:00
- 预期规则:返回所有和查询区间有重叠的记录,完全不重叠的记录过滤,对应预期返回id=1、2、4,过滤id=3。
核心判断逻辑
两个时间区间存在重叠的通用判断规则为:记录的开始时间早于查询区间的结束时间,且记录的结束时间晚于查询区间的开始时间。
该规则可覆盖所有符合要求的场景:
- 记录时段完全落在查询区间内(如id=1)
- 记录结束时间超出查询区间上限,但开始时间落在区间内(如id=2、id=4)
- 记录开始时间早于查询区间下限,但结束时间落在区间内(若存在这类数据也可正常匹配)
- 记录时段完全落在查询区间之前/之后(如id=3,开始时间晚于查询区间结束时间),会被直接过滤
SQL实现代码
-- 定义查询区间参数,可按需修改 SET @query_start = '05:00:00'; SET @query_end = '10:00:00'; SELECT id, `Start Time`, `End Time` FROM 替换为你的实际表名 WHERE `Start Time` < @query_end AND `End Time` > @query_start;
注意:由于字段名
Start Time、End Time包含空格,SQL中必须用反引号包裹字段名,否则会触发语法错误。
结果校验
执行上述语句后,返回结果与预期完全一致:
- 正常返回id=1、id=2、id=4三条匹配记录
- id=3因开始时间13:15:00晚于查询区间结束时间10:00:00,不满足匹配条件,被正确过滤
内容的提问来源于stack exchange,提问作者Nazmul Hasan Sheum
相关产品推荐
相关产品推荐

