2013-07-11 93 views
-2

tsql的where子句中YEAR DAY MONTH的順序應該是什麼?什麼應該是YEAR()在TSQL where子句中的MONTH()DAY()的順序?

Select * from TABLE_NAME 
WHERE 
YEAR(COLUMN_NAME)=YEAR(GETDATE()) --1 
and DAY(COLUMN_NAME)=DAY(GETDATE()) --2 
and MONTH(COLUMN_NAME)=MONTH(GETDATE()) --3 

該命令是否改善查詢的運行時間? tsql如何執行此語句?

+4

您是否試圖做一個日期比較而忽略了時間? ; http://stackoverflow.com/questions/1427469/compare-dates-in-t-sql-ignoring-the-time-part; http://stackoverflow.com/questions/9308635/best-way-to-compare-dates-without-time-in-sql-server –

+1

您使用的是哪個版本的sqlserver? –

+0

sql server 2008. – Som

回答

5

如果你想提高性能,那麼你做錯了。您正在使用的過濾器不會使用索引(如果在COLUMN_NAME上存在一個索引),因爲您正在對它們應用功能。正確的做法是將該列直接與GETDATE()(在這種情況下)進行比較。這是一個更好的方法:

SELECT * 
FROM TABLE_NAME 
WHERE COLUMN_NAME >= DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) 
AND COLUMN_NAME < DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),1) 
+1

@ t-clausen.dk不,你錯了。在這個查詢中,'GETDATE()'只會被計算一次,'DATEADD()'函數也會被計算。 –

+2

@ t-clausen.dk請查找示例。在我看到的每一種情況下,SQL Server都足夠聰明,只能評估一次GETDATE(),所以我不確定它是如何導致查詢緩慢的。 –

+0

@ t-clausen.dk沒有意識到它。現在修好,謝謝 – Lamak

相關問題