对于调度程序 - 给出开始时间,结束时间和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
答案 0 :(得分:0)
您可以非常轻松地解决此问题(假设您使用的是TIME
数据类型):
if(@NEXT_TIME>@CUR_TIME
OR (DATEPART(hh, @NEXT_TIME) = 0
AND DATEPART(hh, @CUR_TIME) = 11))
如果您正在使用字符串,则可以相当容易地比较最左边的2个字符。