【问题标题】:DateDiff Rounding in SQL ServerSQL Server 中的 DateDiff 舍入
【发布时间】:2010-12-07 20:19:27
【问题描述】:
我有一个表,其中包含运行特定函数的最后日期/时间。在我的存储过程中,如果当前日期/时间距离上次运行时间超过一个小时,我想返回 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?
【问题讨论】:
标签:
sql
sql-server
tsql
sql-server-2008
datediff
【解决方案1】:
用途:
SELECT CASE
WHEN DATEDIFF(hh, LastRunDateTime, GETDATE()) >= 1 THEN 1
ELSE 0
END
参考:
如何使用 DateDiff 进行舍入?
提供的文档链接中的 datepart Boundaries 部分列出了此类信息。
【解决方案2】:
我想你想要
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
这令人困惑,因为第二对日期时间相距较远。此功能在您需要时非常有用,但在您不需要时则违反直觉。