3

我有一个表,其中包含运行特定函数的最后日期/时间。在我的存储过程中,如果当前日期/时间距离上次运行时间超过一个小时,我想返回 1,如果小于它,我想返回 0。目前我有这个:

IF((SELECT TOP 1 DATEDIFF(HH,LastRunDateTime,GETDATE()) FROM myTable) >= 1)
BEGIN
    -- run statement to update LastRunDateTime
        return 1;
END
ELSE
    return 0;
END

舍入如何与 DateDiff 一起使用?

如果超过一个小时,有没有更好的方法只返回 1 ?

4

2 回答 2

2

采用:

SELECT CASE 
         WHEN DATEDIFF(hh, LastRunDateTime, GETDATE()) >= 1 THEN 1 
         ELSE 0 
       END

参考:

舍入如何与 DateDiff 一起使用?

提供的文档链接中的日期部分边界部分列出了此类信息。

于 2010-12-07T20:37:16.467 回答
1

我想你想要

IF DATEADD(hour, LastRunDateTime, 1) <= GETDATE() BEGIN
    RETURN 1;
END;
ELSE BEGIN
    RETURN 0;
END;

DateDiff 比仅仅减去两个日期时间要微妙一些。它实际上告诉您两者之间跨越了多少“边界”。例如:

PRINT DATEDIFF(HH, '2010-12-07T03:59:59', '2010-12-07T04:00:00');
PRINT DATEDIFF(HH, '2010-12-07T04:00:00', '2010-12-07T04:59:59');

打印以下内容:

1
0

which is confusing, because the second pair of datetimes are farther apart. This functionality is great when you need it, but counterintuitive when you don't.

于 2010-12-07T21:12:18.023 回答