日期格式的轉換

to_be_Dba發表於2013-07-08
 
實際工作中可能遇到需要將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
6 rows selected

這是一個典型的日期轉化。由於MM/DD/YY預設是當前的世紀(21世紀,20XX年),以前的19XX年被認為是20XX年,整整差了100年,需要用條件判斷並修改過來。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-765790/,如需轉載,請註明出處,否則將追究法律責任。

相關文章