比较并测试调度程序的00:00:00时间

时间:2014-01-17 18:42:54

标签: sql tsql datetime scheduled-tasks quartz-scheduler

对于调度程序 - 给出开始时间,结束时间和NextOccurance分钟或小时。 为此,我准备了如下逻辑

SET @StartTime = 17:00:00 
SET @TEMP_TIME = StartTime --initially
SET @ENDTIME = 23:59:59
SET @RepeatTimeUnit = 1 --assume unit is hour 
SET @RepeatTimeCount = 1 --to consider one hour

执行以下循环后,将更新开始时间。但是当我在晚上11点到12点之间运行它时,在这种情况下,它将在00:00:00作为@NEXT_TIME。所以,条件

if(@NEXT_TIME>@CUR_TIME)

始终为false,因此循环进入无限执行模式。但除了这个持续时间,相同的逻辑运作良好。

如何处理这种情况? 谢谢你的建议。

IF(@StartTime<@CUR_TIME  AND  @ENDTIME>@CUR_TIME)
WHILE(1=1)
BEGIN
SET @NEXT_TIME=(SELECT CASE @RepeatTimeUnit WHEN 1 THEN DATEADD(HH,@RepeatTimeCount,@TEMP_TIME) WHEN 2 THEN DATEADD(MI,@RepeatTimeCount,@TEMP_TIME) END)
SET @TEMP_TIME = @NEXT_TIME
IF(@NEXT_TIME>@CUR_TIME) BREAK
else CONTINUE
END
SET @StartTime=@NEXT_TIME

1 个答案:

答案 0 :(得分:0)

您可以非常轻松地解决此问题(假设您使用的是TIME数据类型):

if(@NEXT_TIME>@CUR_TIME 
    OR (DATEPART(hh, @NEXT_TIME) = 0 
        AND DATEPART(hh, @CUR_TIME) = 11))

如果您正在使用字符串,则可以相当容易地比较最左边的2个字符。