如何根据指定起止时间查询时段内可用的工作人员?
查询指定时间段可用的工作人员
嘿,这个问题其实是典型的时间段重叠判断场景,你用BETWEEN只匹配了starts_at落在目标区间的情况,自然会漏掉完全覆盖目标时段的记录。咱们来一步步解决它:
核心逻辑:判断时间段是否重叠
两个时间段(A和B)存在重叠的通用条件是:
A的开始时间 < B的结束时间 并且 A的结束时间 > B的开始时间
放到你的场景里,目标时段是12:00到15:30,所以只需要判断工作人员的工作时段和这个目标时段满足上述条件即可,这个逻辑能覆盖所有重叠情况:
- 工作时段完全覆盖目标时段(比如09:00-17:00)
- 工作时段部分重叠目标时段(比如11:00-13:00、14:00-16:00)
- 工作时段完全在目标时段内(比如13:00-14:00)
最终SQL查询语句
结合你的work_hours表结构,查询语句如下:
SELECT DISTINCT worker_id FROM work_hours WHERE starts_at < '15:30' AND ends_at > '12:00';
关键细节说明
- 使用
DISTINCT是因为同一个工作人员可能在不同日期(day字段)有工作记录,去重后得到唯一的可用人员ID - 如果需要限定具体某一天(比如周一,
day=1),只需添加额外条件:SELECT DISTINCT worker_id FROM work_hours WHERE day = 1 AND starts_at < '15:30' AND ends_at > '12:00';
这个查询逻辑能精准匹配所有和目标时段有重叠的工作人员,再也不会漏掉那些完全覆盖目标时段的记录啦!
内容的提问来源于stack exchange,提问作者user1354934
相关产品推荐
相关产品推荐

