我正在尝试运行此查询来检查当前时间是否不在 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 之后不工作
为什么?
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'
将其分成 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
您真的不想使用字符串格式进行此类测试。这些将假设凌晨 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
您不能以 24 小时格式应用此类条件。相反,您可以实现与此相同的目标
if (select convert(nvarchar (8), getdate(), 114)) between '02:00:00' and '19:00:00'
begin
print 'a'
end