2010-10-19 41 views
0

我有一個查詢此條件:的SQLServer 2005:錯誤轉換日期「YYYY-MM-DD」查詢

WHERE fielddate> = '2010-10-01 'AND fielddate <= '2010-10-18' 

將數據庫遷移到另一臺服務器(2008)具有相同引擎數據庫(SQLSERVER -2005快遞),返回的錯誤:

The conversion of a char data type to a datetime data type resulting in an out-of-range datetime value.

但是,如果我有這樣的查詢工作

WHERE fielddate> = '20101001 'AND fielddate <= '20101018' 

整理類型是SA me:

Modern_Spanish_CI_AS

和我看到的所有其他功能都是一樣的。

我不知道問題是什麼

謝謝。

回答

0

這些明確的日期格式的解釋方式取決於用於登錄的默認語言。據推測,您在一個實例中的登錄名與其他實例中的語言不同。

最好的做法是避免這些不明確的格式。

-1

問題源於您的數據存儲在字符字段而非日期時間字段中的事實。尤其是因爲不同的排序規則將不同地寫入/讀入字符字段。

追求變革

我的第一個建議是將字段的數據類型更改爲DateTime。既然你是去一個全新的SQL 2008數據庫,您可能希望利用和改變存儲在字符格式的任何日期與實際日期時間

CAST和CONVERT

您可以使用CAST來顯式轉換字段,如

WHERE 1=1 
AND CAST (fielddate AS DATETIME) >= '2010-10-01 'AND 
CAST (fielddate AS DATETIME) <= '2010-10-18' 
+0

這是一個字符串文字,不是存儲在字符列中的日期。無論如何,當它用於針對日期時間列的謂詞中時,它將隱式地轉換爲日期時間,這就是爲什麼他看到了他所看到的錯誤消息。 – 2010-10-19 12:25:26

+0

系統很棒,我無法全部更改 – 2010-10-19 12:28:57

+0

轉換效果更好,因爲您指定的格式 – ykatchou 2010-10-19 13:17:56