我試圖從表中插入數據到另一個表中,第一個表是varchar,第二個表是日期。SQLServer - 在插入時跳過錯誤的行
我知道convert
幾乎每行(在varchar表中)都有正確的格式。但有些人錯了。
我有70000行,如果我嘗試插入所有這些,我得到錯誤「將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值。也許因爲一個月有30天插入31或可能一天插入爲0.
我需要的是一個跳過錯誤的方法,插入其餘的方法,以及知道哪些行是錯誤的方法超級有用。
THX的傢伙你搖滾,
我試圖從表中插入數據到另一個表中,第一個表是varchar,第二個表是日期。SQLServer - 在插入時跳過錯誤的行
我知道convert
幾乎每行(在varchar表中)都有正確的格式。但有些人錯了。
我有70000行,如果我嘗試插入所有這些,我得到錯誤「將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值。也許因爲一個月有30天插入31或可能一天插入爲0.
我需要的是一個跳過錯誤的方法,插入其餘的方法,以及知道哪些行是錯誤的方法超級有用。
THX的傢伙你搖滾,
THX的傢伙,我用@dfundako答案;與TRY_CONVERT我能看到哪些行是錯誤的(因爲它返回null)和插入是正確的代碼是在這裏
select
TRY_CONVERT(datetime,
CONCAT (CONVERT(VARCHAR(10),db1.AnoCreaReg),'-',
CONVERT(VARCHAR(10),db1.MesCreaReg),'-',
CONVERT(VARCHAR(10),db1.DiaCreaReg))end) from Herpetologia.dbo.especimenes db1
它應該是更容易只是排除未來的研究不正確的記錄:
SELECT CAST(CharDateColumn as Date)
FROM ABC
WHERE IsDate(CharDateColumn) = 1;
添加一個'where'子句以過濾掉錯誤的格式 –
使用Try_PARSE(),TRY_CONVERT()填充一個帶有乾淨數據的臨時表,您的選擇,然後從臨時表中插入到您的新表中。 – dfundako
爲您正在使用的特定版本的SQL Server添加標籤。 –