2009-09-02 37 views
0

我有一個500萬條日誌記錄存儲爲char(10)格式爲yyyy/mm/dd的表。我需要把這些轉化爲datetime,所以我用:SQL更新varchar到日期錯誤

UPDATE [Database].[dbo].[Table] 
    SET [DoB]=convert(datetime,[DoBText],103) 
GO 

但我得到的錯誤:

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

現在,我已經嘗試修復數據,所以這不會發生 - 即不低於1900或2000以上的「yyyy」,沒有「dd」高於30(2月28日),沒有「mm」高於12或低於0.沒有NULL。

轉換仍然失敗。

有沒有什麼辦法可以讓SQL跳過對錯誤的轉換,然後繼續?

E.g.是這樣的:

SET [DoB]= try to do [DoB]=convert(datetime,[DoBText],103) if fails SET [DoB] = NULL 

感謝 卡爾

+0

有些月份有31天 - 我希望你沒有破壞你的數據:S – 2009-09-02 08:24:30

+0

此外,沒有月份零 - 月份應該是1-12包括在內。 – 2009-09-02 08:25:02

回答

1

嘗試以下操作:

SET DATEFORMAT YMD; 

UPDATE [Database].[dbo].[Table] 
SET [DoB]=[DoBText] 
WHERE ISDATE([DoBText]) = 1 

這將轉換那些被確認爲有效的日期/時間值,其餘將保持原樣。

0

插入YYYYMMDD格式或參數,使用日期,你會不會有這個問題。 或執行以下操作

SET DATEFORMAT DMY 
SET DATEFORMAT MDY 
SET DATEFORMAT YMD 
SET DATEFORMAT YDM 
1

轉換風格103的一個處理格式爲dd /月/年的日期。使用轉換樣式111來處理格式爲yyyy/mm/dd。

+0

感謝您指出了這一點! – Karl 2009-09-02 10:54:20