排除

2015-02-10 73 views
0

我想從一個日期範圍exlcude週四在SQL Server中的日排除

以下是我想出了其他的例子:

SELECT * 
FROM table 
WHERE ((DATEPART(WEEKDAY, date_field) + @@DATEFIRST) % 7) NOT IN (5) 

這似乎是工作,但我想看看是否有任何改進建議等。

謝謝!

+0

這是要掃描,除非你的索引計算列(這將是艱難的日期/時間計算),我不知道,有一種方法來解決該問題。但至少,[請停止使用像'dw'這樣的懶惰速記](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-與-日期時間operations.aspx)。 – 2015-02-10 20:53:06

+0

感謝您的提示,不知道。有點諷刺,但至少,你看到了你的網站。 – boognish 2015-02-10 21:03:09

+0

我不關心我的網站的意見 - 它甚至不是我的網站。我確實看到相同類型的模式始終導致相同類型的問題。我試圖提供一些有用的建議。如果你發現這種尷尬,你可能想要停止使用互聯網。 – 2015-02-10 21:09:38

回答

0

嘗試DATENAME()功能:

select * from table where DATENAME(WEEKDAY, date_field) <> 'Thursday'

+0

不確定這是否會成爲性能方面的更好解決方案,因爲謂詞仍將包含列的*表達式*與包含列的*表達式*比較,並將其與值相比較。無論採用哪種方式,這都會使查詢不那麼普遍,因爲原始方法允許您在* any *語言環境中使用查詢,而這可以將其限制爲任何*英語*語言環境。 (當然,可能仍然在爲OP工作。) – 2015-02-11 07:55:22