如何通过逻辑判断和索引优化在MySQL中高效查询重叠时间段数据?
- 内容介绍
- 文章标签
- 相关推荐
本文共计932个文字,预计阅读时间需要4分钟。
使用以下查询语句可以重叠时间段,但可能会丢失数据:
根本原因是 BETWEEN 只检查单端点是否落在目标区间内,而重叠本质是两个区间有交集,必须同时约束两端。
- 正确逻辑是:
new_start old_start - 字段类型必须是
TIME、DATETIME或TIMESTAMP;存成字符串会导致字典序比较,结果不可靠 - 如果字段含日期(如
DATETIME),注意时区一致性,避免因服务器/会话时区不同导致比较错乱
查某员工当天是否存在考勤重叠的 SQL 写法
场景:插入新考勤前,先确认该员工当天是否已有与其他记录重叠的时间段。
本文共计932个文字,预计阅读时间需要4分钟。
使用以下查询语句可以重叠时间段,但可能会丢失数据:
根本原因是 BETWEEN 只检查单端点是否落在目标区间内,而重叠本质是两个区间有交集,必须同时约束两端。
- 正确逻辑是:
new_start old_start - 字段类型必须是
TIME、DATETIME或TIMESTAMP;存成字符串会导致字典序比较,结果不可靠 - 如果字段含日期(如
DATETIME),注意时区一致性,避免因服务器/会话时区不同导致比较错乱
查某员工当天是否存在考勤重叠的 SQL 写法
场景:插入新考勤前,先确认该员工当天是否已有与其他记录重叠的时间段。

