实际工作中可能遇到需要将varchar类型的日期或者由其他形式给出的不同格式日期导入数据库的需求。
可以使用正则表达式得到结果。
比如:
SQL> select
2 airline_code,eff_from
3 ,case
4 when regexp_like(eff_from,'^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$') then TO_DATE(EFF_FROM,'YYYY-MM-DD')
5 when regexp_like(eff_from,'^([0-9]{8})$') then TO_DATE(EFF_FROM,'YYYYMMDD')
6 when regexp_like(eff_from,'^([0-9]{1,2}/[0-9]{1,2}/[0-9]{2})$') and TO_DATE(EFF_FROM,'MM/DD/YY')>sysdate then add_months(TO_DATE(EFF_FROM,'MM/DD/YY'),-1200)
7 when regexp_like(eff_from,'^([0-9]{1,2}/[0-9]{1,2}/[0-9]{2})$') and TO_DATE(EFF_FROM,'MM/DD/YY') 8 when eff_from is null then to_date('20130101','yyyymmdd')
9 end as effective_from
10 from stage_airline;
AIRLINE_CODE EFF_FROM EFFECTIVE_FROM
------------ -------------------------------------------------------------------------------- --------------
695 1996-8-1
512 08/12/11 2011-8-12
512 1994-1-1 1994-1-1
695 08/23/93 1993-8-23
706 08/01/05 2005-8-1
706 20020101 2002-1-1
这是一个典型的日期转化。由于MM/DD/YY默认是当前的世纪(21世纪,20XX年),以前的19XX年被认为是20XX年,整整差了100年,需要用条件判断并修改过来。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451536/viewspace-765790/,如需转载,请注明出处,否则将追究法律责任。