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')
  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'"日付文字列エラー"
  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"
  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'))
  FROM DUAL;
 
NVL(TO_D
--------
00-01-01

share


本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。