2010-09-23 110 views
1

我有一個表,不幸的是一些日期被存儲爲字符串。SQL Server 2008 VarChar To DateTime

我有許多由他們將它們轉換成日期時間和過濾的報告。這是直到今天工作正常時,突然我得到這個錯誤

「varchar數據類型爲datetime數據類型的轉換導致超出範圍的值。」

的日期都存儲在「YYYY-MM-DD」的格式,並都是有效的。

如果我運行下面的SQL語句

SELECT CAST('2010-06-02' AS DateTime) 

我希望得到「2010-06-02」,然而今天我發現了「2010-02-06」的東西已經與改變方式SQL格式日期。我看了一下服務器上的區域設置,看起來都是正確的。

還有什麼可能會導致這?

回答

0

得到這個轉換的一個明確的方法是做以下:

SELECT CAST(replace('2010-06-02', '-', '') AS DateTime) 

而且將永遠被解釋爲YYYYMMDD,忽視了set dateformat ydm聲明或數據庫具有任何文化背景。

3

嘗試設置格式明確

select convert(datetime, '2010-06-02',101) 
+0

@Gavin - 可能是數據庫中的語言已更改。 http://msdn.microsoft.com/en-us/library/ms191448.aspx – codingbadger 2010-09-23 10:37:17

+0

@Gavin - 在SQL Server上的日期和時間一些進一步的信息http://msdn.microsoft.com/en-us/library/ms180878 .aspx – codingbadger 2010-09-23 10:37:57

+0

@Gavin Draper這種印象很接近現實。這是沒有連字符的日期字符串,被解釋爲忽略了您可能擁有的任何文化設置。 – 2010-09-23 10:47:13

0

Q1:還有什麼可能會導致這?

的地方,你可能是local101(美國)之下,從103(英國/法國)

像巴里傷心使用將數據convert