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

如何编写符合IBM应用限制的跨日夜时段SQL查询语句

解决跨日夜时段的SQL查询方案

针对你遇到的这个跨午夜时段判断问题,同时满足IBM应用的严格SQL格式限制,我们可以通过区分时段是否跨天来构造WHERE条件,完美覆盖所有情况:

核心逻辑

我们需要分两种场景处理:

  1. 非跨天时段(SCHEDULESTART <= SCHEDULEEND,比如09:00-17:00):直接判断时间落在起始和结束区间内
  2. 跨天时段(SCHEDULESTART > SCHEDULEEND,比如22:00-03:00):时间要么大于等于起始时间,要么小于等于结束时间

符合要求的SQL语句

SELECT * FROM T1 WHERE
(
    -- 非跨天时段:时间在区间内
    (SELECT SCHEDULESTART FROM T2) <= (SELECT SCHEDULEEND FROM T2)
    AND TIME(SCHEDULE) BETWEEN (SELECT SCHEDULESTART FROM T2) AND (SELECT SCHEDULEEND FROM T2)
)
OR
(
    -- 跨天时段:时间大于等于起始 或者 小于等于结束
    (SELECT SCHEDULESTART FROM T2) > (SELECT SCHEDULEEND FROM T2)
    AND (TIME(SCHEDULE) >= (SELECT SCHEDULESTART FROM T2) OR TIME(SCHEDULE) <= (SELECT SCHEDULEEND FROM T2))
)

说明

  • 这个语句严格遵循了SELECT * FROM T1 WHERE...的开头要求,没有使用任何JOIN/UNION ALL等受限语法
  • 通过子查询获取T2的时段参数,自动适配两种时段类型
  • 不管T2里是普通日间时段还是跨午夜时段,都能准确筛选出T1中符合条件的行

举个测试例子:

  • 如果T2的时段是22:00到03:00,T1中2018-05-12 23:00:00和2018-05-13 02:00:00都会被选中,而2018-05-12 10:00:00会被排除
  • 如果T2的时段是09:00到17:00,则只有2018-05-12 14:00:00这类落在区间内的行被选中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:19