Oracle SQL 関数 : TO_DATE : 文字列の日付型へ変換
dateRet := TO_DATE( stringSrc [ , stringFormat [ , nlsParam ] ] ); TO_DATEは文字列型データstringSrcを日付書式stringFormatに従ってDATE型のデータを返します。 stringFormatを指定しない場合はデフォルトの日付書式に従います。 nlsParamは月、日の名称及び略称の言語を指定します。
SQL> SELECT TO_DATE('2002/10/01 12:30:00','YYYY/MM/DD HH24:MI:SS'),
2 TO_CHAR(TO_DATE('2002/10/01 12:30:00','YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS')
3 FROM DUAL;
TO_DATE( TO_CHAR(TO_DATE('20
-------- -------------------
02-10-01 2002/10/01 12:30:00
TO_DATE 関数は「stringSrc」が日付文字列として正しくない場合以下の様にエラーが発生します。
SQL> SELECT
2 TO_DATE('2002/99/01 12:30:00','YYYY/MM/DD HH24:MI:SS') "日付文字列エラー"
3 FROM DUAL;
TO_DATE('2002/99/01 12:30:00','YYYY/MM/DD HH24:MI:SS') "日付文字列エラー"
*
行2でエラーが発生しました。:
ORA-01843: 指定した月が無効です。
SQL> SELECT
2 TO_DATE('2002/01/91 12:30:00','YYYY/MM/DD HH24:MI:SS') "日付文字列エラー2"
3 FROM DUAL;
TO_DATE('2002/01/91 12:30:00','YYYY/MM/DD HH24:MI:SS') "日付文字列エラー2"
*
行2でエラーが発生しました。:
ORA-01847: 月単位の日付は1から月末日の間で指定する必要があります
TO_DATE 関数は「stringSrc」が NULL の場合は結果 NULL が返ります。
そのため、TO_DATE の返り値を NVL でラップしてデフォルト値を設定すると以下の様になります。
SQL> SELECT
2 NVL(TO_DATE(NULL, 'YYYY/MM/DD HH24:MI:SS'), TO_DATE('2000/01/01'))
3 FROM DUAL;
NVL(TO_D
--------
00-01-01