2010-12-07 60 views
3

我有一个表包含运行特定功能的最后日期/时间。在我的存储过程中,如果当前日期/时间距离上次运行时间超过一小时,我想返回1,如果它较少,则返回0。目前我有这个:在SQL Server中的DateDiff舍入

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,如果它已经一个多小时了吗?

+0

存在可能会有更好的表现,它更直观 – 2010-12-07 20:23:40

回答

2

用途:

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

参考:

如何四舍五入工作,则DateDiff?

datepart边界在文档链接部分提供了这样的信息。

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 

这是混乱的,因为第二对日期时间的距离较远。当你需要时,这个功能非常棒,但是当你不需要时,这个功能是违反直觉的。