将varchar类型日期(dd/mm/yyyy)转为datetime时遇范围错误
varchar转datetime提示“数据类型转换导致值超出范围”的解决办法
定位异常数据
错误根源是部分NEWPHASEdt字段的字符串格式不符合datetime的合法范围(比如示例中的2022-16-09,16作为月份明显无效)。先用SQL找出所有无法转换的异常值:SELECT NEWPHASEdt FROM 你的数据表名 WHERE ISDATE(NEWPHASEdt) = 0修正格式后转换
如果发现异常是因为日期格式颠倒(比如存储的是yyyy-dd-mm hh:mm:ss.fff,而非标准的yyyy-mm-dd hh:mm:ss.fff),可以通过字符串调整先修正格式,再转换为datetime:-- 针对yyyy-dd-mm格式的字符串,交换日和月后转datetime SELECT CONVERT(datetime, LEFT(NEWPHASEdt,4) + '-' + SUBSTRING(NEWPHASEdt,9,2) + '-' + SUBSTRING(NEWPHASEdt,6,2) + RIGHT(NEWPHASEdt,12), 120 ) AS converted_dt FROM 你的数据表名注:
RIGHT(NEWPHASEdt,12)是截取时间部分(00:00:00.000),如果你的时间部分长度不一致,需要调整截取长度。处理无效数据
对于确实存在的无效日期(比如月份>12、日期>当月最大天数),可以根据业务需求处理:-- 标记无效数据为NULL UPDATE 你的数据表名 SET NEWPHASEdt = NULL WHERE ISDATE(NEWPHASEdt) = 0 -- 直接删除无效数据(操作前务必备份) DELETE FROM 你的数据表名 WHERE ISDATE(NEWPHASEdt) = 0
内容的提问来源于stack exchange,提问作者asdaswsad
相关产品推荐
相关产品推荐

