sql忽略错误

来源:百度知道 编辑:UC知道 时间:2024/09/26 13:23:14
use match
go
update cTRY_ID set CSRQ=CONVERT(VARCHAR(8),CONVERT(DATETIME,CSRQ),112)

转换格式就是把1980-1-1,1980-10-1,1980-1-10转成19800101,19801001,19800110.

出现问题提示:

服务器: 消息 242,级别 16,状态 3,行 1
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
语句已终止。

分析原因可能是源数据csrq(出生日期)格式有 问题,但一直找不 出错原因在 那条,导致无法一次转换,因为有40万条,有 没 有好 办法,可以忽略错误,一条转没 问题

首先
SELECT CONVERT(DATETIME,CSRQ) FROM 表
有错吗,有错就说明CSRQ具有不规范字符型日期
然后检查是否有空或NULL值
从你的错误说是datetime 值越界
检查字符型日期是否具有小于1753年获大于9999年的
SELECT REPLACE(SUBSTRING('1753-01-01',1,5),'-','')

update 属于隐式事务 MS也没办法忽略把
最好找出错误数据,防止程序中出错

还是先检查数据吧。
select * from cTRY_ID
where
year not between 1753 and 9999 or
monty not between 1 and 12 or
day not between 1 and 31

把这些垃圾数据先处理掉,再update

1.很明显的提示,csrq(出生日期)是日期型数据,而你却用 csrq=convert () 转换成字符,convert应该转换成日期才对
2.如果怀疑是哪条数据可以用2分法测试到底是哪条数据有错误

加个where 条件
如:where CSRQ like '%[-]%[-]%'

CONVERT(VARCHAR(8),CSRQ),112)这个就好用了