2013-07-30 165 views
0

我有一個日期時間列和一個存儲過程,應該檢查傳遞的參數與列的日期時間之間的差異。SQL檢查日期時間差

基本上,我想返回大於或小於5分鐘的差異。

例如,我有如下表:

ID | Date 
---------- 
1 | 2013-07-20 10:00:00 
2 | 2013-07-20 11:00:00 
3 | 2013-07-20 10:01:00 
4 | 2013-07-20 10:03:00 

如果傳遞的參數,例如,是「2013年7月20日10:02:00」,則返回值應該是

1 
3 
4 

因爲它們都在5分鐘的範圍內,少於或多於傳遞的參數。

現在的問題是,如何?

+4

RTFM:http://msdn.microsoft.com/en-us/library/ms189794.aspx –

+0

針對使用'答案使用'DateDiff()'的Abs()' - 這將停止優化器能夠使用'[Date]'字段上的任何索引。 – gvee

+0

只是爲了好玩:)'SELECT GETDATE(, \t CAST(CAST(GETDATE()AS FLOAT)+ 0.003472222222 AS DATETIME), \t CAST(CAST(GETDATE()AS FLOAT) - 0.003472222222 AS DATETIME )' – SQLMason

回答

3
DECLARE @date datetime = '2013-07-20 10:02:00'; 

SELECT id 
FROM your_table 
WHERE date_field >= DateAdd(mi, -5, @date) 
AND date_field < DateAdd(mi, +5, @date); 
+0

datediff使用的其他答案不會給出確切的5分鐘,所以+1這個答案。這將在一張巨大的桌子上執行得更快 –