最近在做数据迁移碰到的坑大大小小也快有十多个了,今天就举出一个比较好描述又比较实用的坑吧。
前提:
从原数据库中提取数据到新的数据库中,但是某些字段在原数据库中时字符串,而在新数据中这些字段类型又是DATE,所以导致了需要利用to_date命令来转换它们,但是在进行数据迁移的过程中报了如下的错误
经过仔细的比对发现了错误的根源,如下图。这就是这几天为什么浪费了那么多时间的原因——原数据库的字段非常不规范,于是第一反应是在后面补上00,这样是不是就可以了呢?
于是把命令改成了下面的
replace(RPAD(YQSJ,8),’ ‘,’0’)
于是就把这些不规范的六位数字改成了8位数字(后面补零),于是又启动了起来,发现报了新的错误 如下图:
ORA-01847: 月份中日的值必须介于 1 和当月最后一日之间
这才恍然大悟,需要补齐的是月份中的日期,怎么可能有0日?所以要把这两位给补成01啊!
于是又修改了命令
replace(RPAD(YQSJ,8),’ ‘,’01’)
=。=于是出现了下面的情况
200107 变成了2001070101
200108 变成了 2001080101
于是去查了replace的用法=。=
使用的函数为replace()
含义为:替换字符串
replace(原字段,“原字段旧内容“,“原字段新内容“,)
最终经过思考改出了最后的语句达到了最后的效果:
,replace(RPAD(replace(RPAD(YQSJ,8),’ ‘,’0*’),8),’*’,’1’)