【当数据库中有几十万条甚至更多的数据时,查找某一存在问题的记录就变得非常困难,这时需要一定思路,下面是今天解决日期问题的方法整理】
1.SELECT TO_DATE(F_BIRTHDAY, 'yyyyMMdd') from T_PERSON_BASE_INFO ;
规范日期格式为yyyy-mm-dd,然而其中有一条格式不对,怎么判断是否有格式不对的情况呢
首先,利用日期格式类型转换函数TO_DATE('数据库原字段',‘转换输出的日期格式’),如果其中有格式不正确的数据,则会报错。
我按照上述语句试图转换,系统提示(“无效的月份”),从而判断,可能有月份大于12,或者不是按照yyyy-mm-dd在数据库里存储的记录。
2.select to_number(SUBSTR(F_BIRTHDAY,7,2)) as cnt from T_PERSON_BASE_INFO where ROWNUM < 10;
SUBSTR(F_BIRTHDAY,7,2) 为截取字符串,将每个日期里的月份单独截取出来。第二个参数为截取的初始位置,第三个参数为截取长度
to_number(SUBSTR(F_BIRTHDAY,7,2)) 将上述截取的字符串转换为数字格式。
where ROWNUM < 400000;(原数据量有80万) 这里可以使用折半查找法, 如果在某一范围内能全部转换输出,说明这个范围内记录没问题。
as cnt 代表为这个记录新赋一个列名
如果输出 “无效字符”
说明在这个范围内有问题,当记录缩小到一定程度,就可以定位然后肉眼修改。比如我的错误在412495-412500行之间,从数据库里定位到行数进而修改。
具体筛选结果如下图。。。
网友评论