2009-07-03 114 views
1

我在sql server中有一個字段類型varchar。它包含像「010109」等數據。Sql Server DATETIME格式不正確

當我試圖將其轉換爲DATETIME時,它的實際值應該是「2009年1月1日」時返回一個值「2001年1月9日」。

有沒有人有解決這個問題?

感謝您的幫助。

+1

「Sql Server日期時間格式*不正確*」 哦,諷刺... – voyager 2009-07-03 14:23:03

回答

2

我想會有一些轉換格式,所以你可以把:

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

+0

同樣的解決方案,我想出了。令人討厭的確實,有趣的是看看有沒有更喜歡的那裏:) – 2009-07-03 12:18:13

1

當您鍵入在T日他「XXXXXX」的格式似乎SQLServer的assumess它是一個ISO格式YYMMDD,因此它不會受到SET DATEFORMAT

我意識到了2種格式的 - 所謂的安全格式

  • ISO:年月日
  • ISO8601:YYYY-MM-DDTHH:MI:ss.mmm

但似乎年月月日日也通過了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,以避免類似的意外,未來

-1

SQL Server中的期待日期爲格式YMD

所以,如果你的字符串是這樣的「090101」你會得到正確的日期。

select(convert(datetime,'090101',104)) 

所以,你將不得不substrtring的部分和運行轉換。