我正在尝试过滤掉在特定时间范围内发生的一些事件。我已经尝试了许多变体,但我无法使过滤器按预期工作。下面的代码旨在当事件发生在晚上10点30分到早上7点30分之外时发送警报。
例如,如果事件发生在晚上11点34分,则应落入“无需操作”条件中,但实际上却落入了Else分支。
出现问题的示例日期与时间:2024年01月04日 23:34:42
DECLARE @actionTime AS smalldatetime = getdate(); -- 使用dateadd(hour, -16, getdate()) 获取昨天的时间
DECLARE @startTime AS smalldatetime, @endTime AS smalldatetime;
-- 设置开始时间和结束时间
SELECT @startTime = DATEADD(hour, 22, DATEADD(day, DATEDIFF(day, 0, getdate() - 1), 0)),
@endTime = DATEADD(minute, 30, DATEADD(hour, 7, DATEADD(day, DATEDIFF(day, 0, getdate()), 0)));
PRINT @actionTime;
PRINT @endTime;
PRINT @startTime;
-- 检查动作时间是否在设定的时间范围内
IF (@actionTime >= @startTime AND @actionTime <= @endTime)
BEGIN
-- 不执行任何操作
PRINT '忽略警报';
END
ELSE
BEGIN
PRINT '发送警报';
END