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

MySQL跨天时间段查询:整数格式时间如何获取对应值?

解决跨天时间段查询问题

不用必须将列改为时间格式,通过调整查询逻辑就能实现需求。

问题原因

你之前的BETWEEN语句失效,是因为跨天时段的start(比如2216)数值大于end(比如100),而00:02对应的整数是2,既不满足2 BETWEEN 2216 AND 100(因为BETWEEN会默认判断值是否在较小数和较大数之间),所以匹配失败。

基于整数的解决方案

直接通过逻辑分支处理两种时段情况:

  1. 非跨天时段(start ≤ end):目标时间在start和end之间
  2. 跨天时段(start > end):目标时间要么≥start(当天晚段),要么≤end(次日早段)

针对00:02(对应整数2)的查询语句如下:

SELECT value 
FROM your_table 
WHERE (start <= end AND 2 BETWEEN start AND end)
   OR (start > end AND (2 >= start OR 2 <= end));

注意将your_table替换为你实际的表名,查询其他时间时,只需把2换成对应整数(比如01:30对应130,22:16对应2216)。

可选:转换为时间格式的方案

如果后续有更多时间相关操作,转换成时间类型会更灵活。以MySQL为例,先把整数转成时间格式,跨天时段给end加上24小时再判断:

SELECT value
FROM your_table
WHERE 
  CASE 
    WHEN STR_TO_DATE(LPAD(start,4,'0'), '%H%i') > STR_TO_DATE(LPAD(end,4,'0'), '%H%i') THEN
      STR_TO_DATE('0002', '%H%i') BETWEEN STR_TO_DATE(LPAD(start,4,'0'), '%H%i') 
                                      AND STR_TO_DATE(LPAD(end,4,'0'), '%H%i') + INTERVAL 24 HOUR
    ELSE
      STR_TO_DATE('0002', '%H%i') BETWEEN STR_TO_DATE(LPAD(start,4,'0'), '%H%i') 
                                      AND STR_TO_DATE(LPAD(end,4,'0'), '%H%i')
  END;

不同数据库的时间转换语法有差异,比如PostgreSQL可使用TO_TIMESTAMP函数,需根据实际数据库调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:35