【问题标题】:Compare and test 00:00:00 time occurrence for scheduler比较和测试调度程序的 00:00:00 时间发生
【发布时间】:2014-02-07 05:30:13
【问题描述】:

对于调度程序 - 给出开始时间、结束时间和 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 点之间运行它时,在这种情况下,@NEXT_TIME 将需要 00:00:00。所以,条件

if(@NEXT_TIME>@CUR_TIME)

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

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

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

【问题讨论】:

  • 也许保持最后的执行时间会对你有所帮助。
  • @EvertonAgner,你是对的。我对其进行了修改,并将先前的计算记录在单独的变量中。虽然最终会在明天晚上 11 点和 12 点之间进行测试。

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


【解决方案1】:

您可以通过以下方式轻松解决此问题(假设您使用的是TIME 数据类型):

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

如果您为此使用字符串,也可以相当轻松地比较最左边的 2 个字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多