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

MySQL跨天时间区间查询:如何匹配用户所选时间?

解决跨天时间区间的MySQL查询问题

你遇到的核心问题是时间区间跨天了——当from_time(19:00:00)大于to_time(01:30:00)时,普通的>=和<=逻辑会失效,因为它默认假设时间是在同一天内递增的。

要正确判断目标时间是否落在这种跨天区间里,我们需要把逻辑拆成两种场景处理:

SELECT * 
FROM `table`
WHERE (
    -- 场景1:时间区间不跨天(比如 from_time=09:00, to_time=18:00)
    (from_time <= to_time AND '目标时间' BETWEEN from_time AND to_time)
    OR
    -- 场景2:时间区间跨天(比如你的19:00到01:30)
    (from_time > to_time AND ('目标时间' >= from_time OR '目标时间' <= to_time))
);

逻辑解释

  • 对于不跨天的区间,直接用BETWEEN就能准确判断目标时间是否在两个时间点之间。
  • 对于跨天的区间,目标时间只要满足以下两个条件之一,就属于该区间:
    1. 目标时间晚于等于from_time(比如你要查的23:00 >= 19:00)
    2. 目标时间早于等于to_time(比如你要查的00:30 <= 01:30)

针对你的测试案例验证

  • 当目标时间是00:30:00(12:30 AM):触发跨天逻辑,00:30:00 <= 01:30:00,会匹配到这条记录。
  • 当目标时间是23:00:00(11:00 PM):触发跨天逻辑,23:00:00 >= 19:00:00,也会匹配到这条记录。

如果你的目标时间是动态参数(比如用户输入),可以用变量替换,比如:

-- 假设@target_time是传入的参数,比如'00:30:00'
SELECT * 
FROM `table`
WHERE (
    (from_time <= to_time AND @target_time BETWEEN from_time AND to_time)
    OR
    (from_time > to_time AND (@target_time >= from_time OR @target_time <= to_time))
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:42:07