我试图从表中插入数据到另一个表中,第一个表是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添加标签。 –