2019.4.15
2020.1.7

TO_CHARを使った日付のフォーマットで日本語の「年月日」を含む文字列を出力する

Oracleの関数「TO_CHAR」を使った日付のフォーマットで、日本語の「年月日」を含む文字列を出力する方法です。

最初は単純に「YYYY年MM月DD日」みたいな感じでやればいいだろうと思っていましたが、それはできませんでした。さすがはOracleです。

コード

まず、日本語を使わない場合の日付のフォーマットは以下のようになります。


SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;

-------------------
2019-04-15

上記のSQLを実行して得られる出力結果は「2019-04-15」という文字列です。

この結果から、「-」と末尾に「年」「月」「日」を配置すればいいと思うのは仕方のないところで、実際に実行してみるとエラー「ORA-01821: 日付書式コードが無効です」が発生します。


SELECT TO_CHAR(SYSDATE, 'YYYY年MM月DD日') FROM DUAL;

-------------------
ORA-01821: 日付書式コードが無効です
01821. 00000 -  "date format not recognized"

上記のエラーを回避して、日本語を含む形式にフォーマットするためには、以下のようにします。


SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日"') FROM DUAL;

-------------------
2019年04月15日

エラーが出たSQLからの変更点は、「年」「月」「日」の日本語部分をダブルクォーテーションで括っている点です。

Oracle】関連記事