我在做一個查詢,如下所示:SQL DateDifference在where子句中
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
,而不是工作
我試圖讓這不是超過3天的數據。
SQL服務器。
如何做到這一點?
DATEDIFF作品太慢..
我在做一個查詢,如下所示:SQL DateDifference在where子句中
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
,而不是工作
我試圖讓這不是超過3天的數據。
SQL服務器。
如何做到這一點?
DATEDIFF作品太慢..
DateDiff
是非常快...您的問題是,你正在運行它的數據庫表列的值,因此查詢處理器必須運行在表中的每一行的功能,即使是在此列的索引。這意味着它必須從磁盤加載整個表。
相反,使用在今天的日期的dateAdd
功能,和數據庫表列與該單一計算的結果。現在它只能運行一次DateAdd()
,它可以使用索引(如果存在的話),只加載符合謂詞條件的行。
Where a.DateValue > DateAdd(day,-3,getdate())
這樣做,這使得您的查詢謂詞SARG-able
您的查詢似乎並不壞。解決它的另一種方式是:
SELECT * FROM a WHERE a.DateValue > DATEADD(dd,-3,GETDATE())
微軟在http://msdn.microsoft.com/en-us/library/aa258269%28v=sql.80%29.aspx文檔建議,而不是DateTimeNow
你應該有getdate()
。它能以這種方式更好嗎?
特區政府-能,我還沒有聽說過。謝謝! – 2011-03-10 22:42:51
'查詢處理器必須運行在table'每一行的功能幫助我瞭解和解決我有一個問題,即完全一樣的語句DATEDIFF會抱怨在WHERE子句中,但不是在SELECT溢出。 – 2013-10-05 19:38:10
我是有子查詢使用與DATEDIFF一個地方,這讓我瘋了,麻煩您的解決方案是偉大的,真的幫了我。非常感謝。 – FabianSilva 2014-09-23 14:44:29