2012-06-13 69 views
4
Select CONVERT(Date, '13-5-2012') 

當我在Management Studio中運行上面的T-SQL語句,我得到我得到以下錯誤:轉換失敗時從字符串錯誤轉換日期和/或時間

「轉換轉換時失敗來自字符串的日期和/或時間「

Is there away我可以將該值轉換爲有效的Date類型成功嗎?我有一個nvarchar(255)列中的這樣的值,其dataType我想更改爲SQL Server表中的Date類型,但是我遇到了該錯誤,我想先在表上的Update語句中進行轉換。

回答

0

試試這個....

Select CONVERT(Date,'5-13-2012') 

使用 'MM-DD-YYYY' 格式。

+0

我測試過,它的工作原理,但我有幾百行與在'13值的表-5-2012' 格式在一列中,我想將該列的數據類型從nvarchar(255)更改爲Date,但由於'13 -5-2012'的值而不能接受。所以我想運行一個更新聲明,將'13 -5-2012'轉換爲'5-13-2012' – StackTrace

4

在一般情況下,我通常懷疑有不能在列轉換的數據,並且將使用一個case語句檢查它的可轉換第一:

SELECT CASE WHEN ISDATE(mycolumn)=1 THEN CONVERT(Date, mycolumn, [style]) END 
FROM mytable 

我相信Convert依賴於SQL服務器日期格式設置。請使用DBCC USEROPTIONS檢查您的dateformat設置。

我懷疑,如果你設定的日期格式,以dmy它就會明白:

SET DATEFORMAT dmy 
GO 

如果連那麼它不工作,你無法找到符合您的數據的風​​格,如果你的數據是一致的格式,只需手動字符串操作即可構建它(如果可以的話,不要這樣做)。

+1

像魅力一樣工作,謝謝! – jinsungy

0

CONVERT假定原來的數據可以代表日期。一個不好的數據項可能會引發這裏提到的相同的轉換錯誤,而不會指出問題。

使用ISDATE幫助我解決了不良數據項。

SELECT CONVERT(DATE,CONVERT(CHAR(8),字段名)) 從數據庫名 WHERE ISDATE(字段名)<> 0

0

你需要給在轉換日期格式,這將解決該錯誤。

選擇轉換(日期,'13 -5-2012' ,103)

相關問題