2010-02-01 92 views

回答

0

例如

CAST(CONVERT(VARCHAR(10), date, 120) AS DATETIME) 

請注意,這不會很好地利用日期字段上的任何索引,因此您可能會看到性能較差,尤其是對於較高的數據量。

替代將是:
- 重新評估你想實現什麼和如何
- 字段的日期和時間元素存儲在2個獨立的,可轉位的字段。

+0

我不希望更改@idate,但日期 – 2010-02-01 13:18:00

+0

只是更改@idate到目前爲止,更新。請注意,這會阻止良好的索引使用 – AdaTheDev 2010-02-01 13:19:39

0

除非絕對必要,否則不應該更改列信息 - 這將導致全表掃描並忽略索引。只要確保@idate是正確的。

1

最好使用範圍掃描。爲什麼你需要改變存儲在列中的值?如果你想找到的是發生在2009-09-15(不分時間)的一切,你可以說:

WHERE [date] >= '20090915' 
AND [date] < '20090916'; 

現在你仍然可以在[日期]列使用索引,如果它存在,如果你經常這樣運行查詢,那麼它應該是可以理解的。在左側轉換會導致非SARGable查詢,這幾乎會單方面地影響性能。

一個有用的鏈接檢查出是蒂博爾的日期/時間數據類型的文章,包括查詢提示:

http://www.karaszi.com/SQLServer/info_datetime.asp

我也寫了一個漂亮的長篇文章在查詢日期範圍時避免不良做法:

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx