かきスタンプ

福岡で物流系のエンジニアやってます

Oracle:文字列を日付型に変換するファンクション(できなければ nullを返す)

Oracleで、文字列を日付型に変換し、できなければnullを返すファンクションを書いてみた。

create or replace function CONVERT_TO_DATE (
  ARG_DATE  in varchar2) 
return date is

    FORMATTED_DATE  varchar2(8);

begin

    FORMATTED_DATE := substr(replace(ARG_DATE,'/',''),1,8);

    return  to_date( FORMATTED_DATE, 'YYYYMMDD' );

exception
  when others then
  return null;
end;

可能であれば日付型に変換し、できなければ nullを返す。
 
使用例

select
    CONVERT_TO_DATE('20170101')    as  RESULT1
   ,CONVERT_TO_DATE('2017/01/01')  as  RESULT2
   ,CONVERT_TO_DATE('xxx')         as  RESULT3
   ,CONVERT_TO_DATE('2017/01/32')  as  RESULT4
from
    dual

 
実行結果例

RESULT1 RESULT2 RESULT3 RESULT4
2017-01-01 2017-01-01 (null) (null)

諸事情により、文字列のカラムに日付情報が格納されているというケースのために。
標準関数の to_dateは、日付型に変換できない場合は例外が発生するので、変換できないレコードが1件でもあると、マトモに実行してくれなかったので作成しました。
 
…ってか、この程度の事、自前で何とかしなくても、標準関数で出来てほしい。
 
ファンクション名は「CONVERT_TO_DATE_FROM_CHAR」にしようかと思いましたが、長いからやめときました。