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