问题描述:将excel表中的数据导入oracle数据库中时,出现问题很多的date类型字段,错误都是todate方法报出的
select t.id id,
to_date(t.BIRTHDATE,'yyyy-mm') BIRTHDATE
from MEDICALCOLLEGE_ROSTER_TEMP t
错误:
1、ora-01841 年份值必须介于 -4713 和 +9999 之间, 且不为 0
解决办法:经过检查,数据中没有超过该范围的年份,考虑是在从excel导入时,插入了看不见的空格,导致错误。于是做如下处理去掉字段中开头的空格
UPDATE MEDICALCOLLEGE_ROSTER_TEMP t SET BIRTHDATE = trim(leading ' ' from t.BIRTHDATE)
2、ORA-01840:输入值对于日期格式不够长
解决办法:引起的原因是数据库中有NULL值字段,导致todate函数接受到的参数值无法进行转换,最简单的可以为NULL值部分插入约定的某个日期
update MEDICALCOLLEGE_ROSTER_TEMP t set t.BIRTHDATE='1000.01' where t.BIRTHDATE is null
对长度不符合要求的进行截取
UPDATE MEDICALCOLLEGE_ROSTER_TEMP t SET BIRTHDATE= subStr(t.BIRTHDATE, 0, 7) where length(t.BIRTHDATE) > 8;