2011-05-20 86 views

回答

1
Set DateFormat DMY 
GO 
Select Cast(Stuff(Stuff(SomeValue, 3, 0, '-'), 6, 0, '-') As datetime) 
From MyData 
+0

使用此解決方案,我應該總是在執行之前將dateformat設置爲DMY? – jrara 2011-05-20 18:40:54

+0

@jara - 是的,因爲它可以確保Cast解釋月和日期正確地獨立於服務器上的默認日期格式 – Thomas 2011-05-20 18:42:14

+0

@jara - 如果沒有DateFormat,例如在美國的機器/服務器上,它會想將日期解釋爲MM-DD-YY而不是DD-MM-YY 。 – Thomas 2011-05-20 18:43:11

1

因爲這種格式是非標準,使用

DECLARE @field char(6) 
SET @field = '231280' 
select convert(datetime, right(@field, 2) + substring(@field, 3, 2) + left(@field, 2) , 12) 
+0

代碼內置字符串順序錯誤造成的誤差,但基本的想法是正確的。我修復了代碼並進行了測試,以確保它能夠正常工作。 – JohnFx 2011-05-20 18:35:28

+0

@JohnFx我在發佈它5秒後編輯它。我將我的編輯命名爲「Doh」。然後,9分鐘後,你做了同樣的:( – GSerg 2011-05-20 18:41:17

1

使用的串獲得的年,月,日,如果每年大於11加19,如果不加20,得到一年2009格式,但是這是你的查詢,而不是隻是字符串添加您的列名

select CAST(
      CASE WHEN CAST(SUBSTRING('231280', 5, 2) AS INT) >11 
        THEN '19'+SUBSTRING('231280', 5, 2) 
        else '20'+SUBSTRING('231280', 5, 2) 
       END 
     +'-'+SUBSTRING('231280', 3, 2)+'-'+SUBSTRING('231280', 1, 2) as datetime) 
1

你不得不使用一些子步法將字符串轉換爲已知date format。下面是一個例子轉換字符串格式化3,「英/法」:

declare @YourTable table (YourColumn varchar(50)) 
insert @YourTable 
      select '231280' 
union all select '121280' 
union all select '131185' 

select convert(datetime, substring(YourColumn,1,2) + '/' + 
    substring(YourColumn,3,2) + '/' + substring(YourColumn,5,2), 3) 
from @YourTable 
+0

感謝您提供了一個很好的例子! – jrara 2011-05-20 18:44:29