You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨天时段SQL时间查询返回空值的解决方案求助

解决跨天班次时间查询的问题

这个问题我之前也碰到过,核心原因是跨天班次的时间范围没法用普通的BETWEEN直接判断,咱们一步步来拆解和解决:

问题根源

你看第三班的时间范围是20:00:01到03:00:00,这里start_time(20:00:01)是大于end_time(03:00:00)的。当你用'22:02:22' BETWEEN start_time AND end_time时,数据库会默认判断22:02:22 >= 20:00:01 AND 22:02:22 <= 03:00:00,后者显然不成立,所以返回空结果。

解决方案

我们需要把班次分成非跨天和跨天两种情况,分别写查询条件:

SELECT * 
FROM shift_time 
WHERE 
  -- 处理非跨天的班次:时间在start_time和end_time之间
  (start_time <= end_time AND '22:02:22' BETWEEN start_time AND end_time)
  OR
  -- 处理跨天的班次:时间要么在当天的后半段(>=start_time),要么在次日凌晨(<=end_time)
  (start_time > end_time AND ('22:02:22' >= start_time OR '22:02:22' <= end_time));

验证效果

  • 查询22:02:22时,会匹配第三班(no_shift=3),因为它属于跨天班次,且22:02:22 >= 20:00:01;
  • 查询02:30:00时,同样会匹配第三班,因为02:30:00 <= 03:00:00;
  • 非跨天的班次(比如第一班、第二班)依然可以用原来的逻辑正常匹配。

你可以把查询的时间参数换成变量或者动态值,这个逻辑都适用哦。

内容的提问来源于stack exchange,提问作者tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:30:13