字符型日期转换日期型的非常数据定位与处理

由于数据的不规范性,造成日期类型转换异常。通过编写函数,找出异常值。

 1   CREATE OR REPLACE EDITIONABLE FUNCTION FUN_STR_TO_DATE (I_STR VARCHAR2)
 2 return DATE is
 3    V_DATE DATE;
 4 begin
 5   V_DATE:= TO_DATE(I_STR,'YYYY/MM/DD') ; --单一格式
 6   REturn V_DATE;
 7 EXCEPTION
 8   WHEN OTHERS THEN 
 9      select TO_DATE('99991231','YYYYMMDD') into V_DATE from dual;
10      return   V_DATE ;
11 end ;

或者:

 1   CREATE OR REPLACE EDITIONABLE FUNCTION FN_STR_TO_DATE (I_STR VARCHAR2)
 2 RETURN DATE IS
 3    V_DATE DATE;
 4 BEGIN
 5   if INSTR(I_STR,'/') > 0 then 
 6      SELECT TO_DATE(I_STR,'YYYY/MM/DD') INTO V_DATE FROM DUAL;
 7    elsif INSTR(I_STR,'-') > 0 then 
 8      SELECT TO_DATE(I_STR,'YYYY-MM-DD') INTO V_DATE FROM DUAL;
 9   else 
10     SELECT TO_DATE(I_STR,'YYYYMMDD') INTO V_DATE FROM DUAL;
11   end if;--多种格式的日期
12   RETURN V_DATE;
13 EXCEPTION
14   WHEN OTHERS THEN 
15      SELECT TO_DATE('99991231','YYYYMMDD') INTO V_DATE FROM DUAL;
16      RETURN   V_DATE ;
17 END ;

 

异常数据都转换成 99991231,通过检索对比找到异常的源数据。

转载于:https://www.cnblogs.com/DATABOOK/p/10222043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值