2016-07-29 66 views
0

我试图从表中插入数据到另一个表中,第一个表是varchar,第二个表是日期。SQLServer - 在插入时跳过错误的行

我知道convert几乎每行(在varchar表中)都有正确的格式。但有些人错了。

我有70000行,如果我尝试插入所有这些,我得到错误“将varchar数据类型转换为日期时间数据类型导致超出范围的值。也许因为一个月有30天插入31或可能一天插入为0.

我需要的是一个跳过错误的方法,插入其余的方法,以及知道哪些行是错误的方法超级有用。

THX的家伙你摇滚,

+0

添加一个'where'子句以过滤掉错误的格式 –

+2

使用Try_PARSE(),TRY_CONVERT()填充一个带有干净数据的临时表,您的选择,然后从临时表中插入到您的新表中。 – dfundako

+0

为您正在使用的特定版本的SQL Server添加标签。 –

回答

1

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 
1

它应该是更容易只是排除未来的研究不正确的记录:

SELECT CAST(CharDateColumn as Date) 
FROM ABC 
WHERE IsDate(CharDateColumn) = 1;