我在sql server中有一個字段類型varchar。它包含像「010109」等數據。Sql Server DATETIME格式不正確
當我試圖將其轉換爲DATETIME時,它的實際值應該是「2009年1月1日」時返回一個值「2001年1月9日」。
有沒有人有解決這個問題?
感謝您的幫助。
我在sql server中有一個字段類型varchar。它包含像「010109」等數據。Sql Server DATETIME格式不正確
當我試圖將其轉換爲DATETIME時,它的實際值應該是「2009年1月1日」時返回一個值「2001年1月9日」。
有沒有人有解決這個問題?
感謝您的幫助。
我想會有一些轉換格式,所以你可以把:
select(convert(datetime,'010109',<some magic number>))
並得到結果,但我似乎無法找到一個給出正確的日期:(
這作品,但很討厭:
declare @dt varchar(6)
select @dt = '010109'
select convert(datetime,RIGHT(@dt,2) + SUBSTRING(@dt,3,2) + LEFT(@dt,2))
Yeesh
同樣的解決方案,我想出了。令人討厭的確實,有趣的是看看有沒有更喜歡的那裏:) – 2009-07-03 12:18:13
當您鍵入在T日他「XXXXXX」的格式似乎SQLServer的assumess它是一個ISO格式YYMMDD,因此它不會受到SET DATEFORMAT
我意識到了2種格式的 - 所謂的安全格式
但似乎年月月日日也通過了ISO - 檢查BOL日期和時間樣式 - 格式12
這可以解釋爲什麼張貼天蠍座的解決方案沒有奏效
您可以使用與格式規範(12)butterchicken提供的解決方案是在安全方面:
declare @dt varchar(6)
select @dt = '010109'
select convert(datetime,RIGHT(@dt,2) + SUBSTRING(@dt,3,2) + LEFT(@dt,2),12)
如果可能的話我將是理想的,如果你能列更改爲datetime,以避免類似的意外,未來
SQL Server中的期待日期爲格式YMD
所以,如果你的字符串是這樣的「090101」你會得到正確的日期。
select(convert(datetime,'090101',104))
所以,你將不得不substrtring的部分和運行轉換。
「Sql Server日期時間格式*不正確*」 哦,諷刺... – voyager 2009-07-03 14:23:03