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」にしようかと思いましたが、長いからやめときました。
スポンサーリンク