2012-02-15 34 views
0

我有一個SQL 2008數據庫,我創建了一個存儲過程來檢查日期時間是否超過3小時,但我不知道如何去做。存儲過程中的比較日期時間

你有辦法做到這一點嗎?

datetime是表中的字段。

BR

+0

答案我的fr iend,正在吹SO,答案是吹在SO:http://stackoverflow.com/questions/807909/how-can-i-compare-time-in-sql-server – vulkanino 2012-02-15 14:21:45

回答

2

而不是應用DATEDIFF的列值布爾函數的日期,這將否定索引,我建議使用列與表達式的比較(其中可以使用索引)。

如果你想這是一個過濾器:

SELECT columns 
FROM dbo.table 
WHERE DateTimeColumn < DATEADD(HOUR, -3, CURRENT_TIMESTAMP); 

(如果你想只有那些超過3小時的行,改變<>>=

如果您想要返回所有行,並顯示列是否超過3小時:

SELECT columns, [3HoursOld] = CASE 
    WHEN DateTimeColumn < DATEADD(HOUR, -3, CURRENT_TIMESTAMP) 
    THEN 'Yes, older than 3 hours.' 
    ELSE 'No, not older than 3 hours.' 
END 
FROM dbo.table; 
1

採取在看DATEDIFF功能。

DATEDIFF (datepart , startdate , enddate) 

然後,您將使用datepart設置爲hh並將enddate設置爲當前時間。要獲得當前的數據庫時間,您可以使用GETDATE()。因爲它會返回經過的小時數,所以將結果與3進行比較。

1

@date是要比較

declare @date datetime 

set @date= '2012-02-15 14:20:42.797' 

SELECT DateDiff(hh, DATEADD(hh,-3,@date), GETDATE()) --if it's > 3 

您更好地創造,它的伎倆,你可以使用任何你喜歡