2013-07-30 129 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这个答案。这将在一张巨大的桌子上执行得更快 –