检查时间间隔

问题描述 投票:0回答:4

我正在尝试运行此查询来检查当前时间是否不在 19:00:00 和 02:00:00(第二天)之间

if (select convert(nvarchar (8), getdate(), 114)) not between '19:00:00' and '02:00:00' 
begin 
    print 'a' 
end

时间在 00:00:00 之后不工作

为什么?

sql sql-server
4个回答
3
投票
IF NOT 
(
  (select convert(nvarchar (8),getdate(),114)) between '00:00:00' and '02:00:00'  
  OR 
  (select convert(nvarchar (8),getdate(),114)) between '19:00:00' and '23:59:59.999' 
)
   print 'a'

0
投票

将其分成 2 个 IF

IF (select convert(nvarchar (8),getdate(),114)) between '00:00:00' and '02:00:00' 
  BEGIN 
   noop1:
  END
ELSE
  BEGIN
    IF (select convert(nvarchar (8),getdate(),114)) not between '19:00:00' and '23:59:59' 
    BEGIN
       print 'a' 
    END
  END

小提琴


0
投票

您真的不想使用字符串格式进行此类测试。这些将假设凌晨 02:00 应作为非排除时间通过测试。前两个测试使用时间类型进行比较。第二对提取小时部分并对其进行测试(但这些首先依赖于整齐的小时边界):

-- comparison via time types
not (cast(getdate() as time) >= '19:00' or cast(getdate() as time) < '02:00')
cast(getdate() as time) >= '02:00' and cast(getdate() as time) < '19:00'

-- hour of day logic
datepart(hour, getdate()) between 2 and 18 -- includes the entire 18th hour
datepart(hour, dateadd(hour, -2, getdate())) < 17

0
投票

您不能以 24 小时格式应用此类条件。相反,您可以实现与此相同的目标

if (select convert(nvarchar (8), getdate(), 114)) between '02:00:00' and '19:00:00' 
begin 
    print 'a' 
end
© www.soinside.com 2019 - 2024. All rights reserved.