2010-12-07 78 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 

這是混亂的,因爲第二對日期時間的距離較遠。當你需要時,這個功能非常棒,但是當你不需要時,這個功能是違反直覺的。