2011-03-29 117 views
8

是否有一种方法在TSQL查询行的日期时间列的值是“现在减去(一定的时间)”来选择时间范围?查询'Now'的日期时间列减去一定的时间?

例如在MySQL中我可以建立这个谓词,如:

(EndTime BETWEEN NOW() - INTERVAL 2 DAY AND NOW()) 

怎么能在这个TSQL完成在SQL Server?

回答

15

您可以使用功能,例如功能。

where endtime between dateadd(day, -2, getdate()) and getdate() 

由于柱endtime不是函数参数,查询优化器可以使用任何会在其上定义的任何索引(的sargable的定义)。

3

可以使用datediff功能。

例如,为了找到最后五分钟内创造的东西,你可以执行

select * 
from Table t 
where datediff(minute, t.CreationDate, getutcdate()) <= 5 
+1

虽然简单,好像这种方法将无法利用索引信息(如果存在)。但是RDBMS优化对我来说是PFM。 – 2011-03-29 19:59:24

+0

@pst - 你是对的,'datediff'不是[sargable](http://stackoverflow.com/questions/799584/what-makes-a-sql-statement-sargable/799616#799616)。 [Bobby D的答案](http://stackoverflow.com/questions/5477653/tsql-now-minus-a-certain-amount-of-time/5477688#5477688)更合适。 – 2011-03-29 20:10:18