2011-03-29 83 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