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

MySQL时间范围查询:起始时间可大于结束时间的场景处理

MySQL 按星期匹配跨天时间区间的查询解决方案

针对你的page_data表需求,正确的查询需要区分三种时间区间场景,以下是覆盖所有情况的SQL语句:

SELECT * 
FROM page_data
WHERE field_value = 'Friday'
AND (
    -- 场景1:全天有效
    (start_time = '00:00:00' AND end_time = '00:00:00')
    -- 场景2:正常时间区间(当天start到当天end)
    OR (start_time < end_time AND TIME(NOW()) BETWEEN start_time AND end_time)
    -- 场景3:跨天区间(当天start到次日end)
    OR (start_time > end_time AND (TIME(NOW()) >= start_time OR TIME(NOW()) <= end_time))
);

逻辑说明

  • 场景1:直接判断start和end均为00:00:00,这类记录全天有效,无需额外时间校验。
  • 场景2:当start_time < end_time时,时间区间是当天的起始到结束,直接用BETWEEN判断当前时间是否在区间内即可。
  • 场景3:当start_time > end_time时,代表区间跨天(比如17:00到次日08:00),此时只要当前时间大于等于start_time(当天17点之后),或者小于等于end_time(次日08点之前),就符合条件。

原语句问题分析

你之前的查询错误地使用了'10:00:00' between end_time and start_time,这会把08:00到17:00的区间也纳入判断,导致10:00这种不在跨天区间内的时间也被错误匹配。正确的逻辑应该是针对跨天场景拆分两个独立的时间判断,而不是反向使用BETWEEN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:07:19