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

SQL查询判断当前时间不在19:00-次日02:00区间凌晨失效原因

问题原因分析

你这段SQL失效的核心原因是把时间转成字符串后用BETWEEN做比较,而字符串是按字典序判断大小的。

具体细节:

  • BETWEEN '19:00:00' AND '02:00:00'在字符串比较逻辑里,'19:00:00'的字典序比'02:00:00'大,这个区间本身是无效的——没有任何字符串会同时满足大于等于'19:00:00'且小于等于'02:00:00'。
  • 因此NOT BETWEEN会永远返回TRUE,不管当前时间是00:00-02:00还是其他时段,都会执行print 'a',完全达不到你想要排除特定时间段的目的。

如果要实现正确逻辑,应该直接基于时间类型判断,不要转成字符串。比如两种可行写法:

-- 方法1:提取小时判断
DECLARE @currentTime TIME = GETDATE()
IF NOT (DATEPART(HOUR, @currentTime) >= 19 OR DATEPART(HOUR, @currentTime) < 2)
BEGIN
    PRINT 'a'
END
-- 方法2:直接用时间范围判断
DECLARE @currentTime TIME = GETDATE()
IF NOT (@currentTime >= '19:00:00' OR @currentTime <= '02:00:00')
BEGIN
    PRINT 'a'
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:52:03