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

MySQL中如何判断时间值是否落在跨天的两个时间区间内

解决跨天时间段匹配的SQL方案

针对你描述的场景(无日期字段、时间段跨度不超过24小时,存在跨午夜的时间段),可以通过分情况判断的SQL语句直接实现需求,无需存储过程:

核心逻辑是区分两种时间段类型:

  • 非跨天时间段:end_time >= start_time,此时目标时间需落在[start_time, end_time)区间内
  • 跨天时间段:end_time < start_time,此时目标时间只需落在[start_time, 24:00)或[00:00, end_time)任一区间内

对应的SQL语句如下(以目标时间22:00为例):

SELECT * 
FROM your_table 
WHERE 
  -- 匹配非跨天的有效时间段
  (start_time <= end_time AND start_time <= '22:00' AND '22:00' < end_time)
  OR
  -- 匹配跨天的有效时间段
  (start_time > end_time AND ('22:00' >= start_time OR '22:00' < end_time));

效果验证

  • 对于id=1的记录(15:00-23:00):属于非跨天时间段,22:00满足15:00 <= 22:00 < 23:00,会被匹配
  • 对于id=2的记录(15:30-01:00):属于跨天时间段,22:00 >= 15:30,满足条件,会被匹配

如果需要动态传入目标时间,只需将语句中的'22:00'替换为对应的参数即可(不同数据库的参数语法略有差异,比如MySQL用@target_time,PostgreSQL用$1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:42:15