Oracle 日付書式で和暦・曜日・月を求める
Oracleで日付書式で和暦・曜日・月を求める方法です。TO_CHAR関数を利用します。

TO_CHARとは、Oracleで数値、日付、MLSLABEL 値を文字型に変換する関数です。SQL や PL/SQL で利用できます。各国語キャラセット(NVARCHAR2型)を返す TO_NCHAR関数というものもあります。使い方はどちらも同じですが、戻り値が違いますので注意しましょう。
ここでは TO_CHARで日付を変換した場合の使い方 をご紹介します。
TO_CHARの文法
まずはTO_CHARの文法をおさえておきましょう。
TO_CHAR ( n [ , fmt [ , ' nlsparams ' ] ] ) n:日付式や文字列式 fmt:日付書式の文字列 nlsparams:各国語サポートパラメータ(シングルクォートが必要) 戻り値:文字型
下表は SYSDATE=2015/08/28 16:45:10 とした場合のサンプル値です。
| 書式 | サンプル値 | 使い方 | 説明 |
|---|---|---|---|
| EYY | H27 | to_char(sysdate,'EYY','nls_calendar=''Japanese Imperial''') | 和暦略称 |
| EEYY | 平成27 | to_char(sysdate,'EEYY','nls_calendar=''Japanese Imperial''') | 和暦 |
| YYYY | 2015 | to_char(sysdate,'YYYY') | 西暦(4桁) |
| YYY | 015 | to_char(sysdate,'YYY') | 西暦(3桁) |
| YY | 15 | to_char(sysdate,'YY') | 西暦(2桁) |
| Y | 5 | to_char(sysdate,'Y') | 西暦(1桁) |
| MM | 08 | to_char(sysdate,'MM') | 月 |
| MON | 8月 | to_char(sysdate,'MON') | 月(日本語) 後ろにスペース付加 |
| MON | AUG | to_char(sysdate,'MON','nls_date_language=''AMERICAN''') | 月(英語) |
| DY | 金 | to_char(sysdate,'DY') | 曜日略称(日本語) |
| DY | FRI | to_char(sysdate,'DY','nls_date_language=''AMERICAN''') | 曜日略称(英語) |
| DAY | 金曜日 | to_char(sysdate,'DAY') | 曜日(日本語) |
| DAY | FRIDAY | to_char(sysdate,'DAY','nls_date_language=''AMERICAN''') | 曜日(英語) 後ろにスペース付加 |
| DD | 28 | to_char(sysdate,'DD') | 日 |
| HH | 04 | to_char(sysdate,'HH') | 12時間表記 |
| HH24 | 16 | to_char(sysdate,'HH24') | 24時間表記 |
| AM | 午後 | to_char(sysdate,'AM') | 午前・午後(日本語) |
| AM | PM | to_char(sysdate,'AM','nls_date_language=''AMERICAN''') | 午前・午後(英語) |
| MI | 45 | to_char(sysdate,'MI') | 分 |
| SS | 10 | to_char(sysdate,'SS') | 秒 |
| WW | 35 | to_char(sysdate,'WW') | 年初めからの週 |
| W | 4 | to_char(sysdate,'W') | 月初からの週 |
| D | 6 | to_char(sysdate,'D') | 週初めからの日数 |
| DDD | 240 | to_char(sysdate,'DDD') | 年初めからの日数 |
| SSSSS | 60310 | to_char(sysdate,'SSSSS') | 日にち初めからの秒数 |
以下の SQL を実行すれば、上記の結果が得られます。
select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') from dual
union all
select to_char(sysdate,'EYY','nls_calendar=''Japanese Imperial''') from dual
union all
select to_char(sysdate,'EEYY','nls_calendar=''Japanese Imperial''') from dual
union all
select to_char(sysdate,'YYYY') from dual
union all
select to_char(sysdate,'YYY') from dual
union all
select to_char(sysdate,'YY') from dual
union all
select to_char(sysdate,'Y') from dual
union all
select to_char(sysdate,'MM') from dual
union all
select to_char(sysdate,'MON') from dual
union all
select to_char(sysdate,'MON','nls_date_language=''AMERICAN''') from dual
union all
select to_char(sysdate,'DY') from dual
union all
select to_char(sysdate,'DY','nls_date_language=''AMERICAN''') from dual
union all
select to_char(sysdate,'DAY') from dual
union all
select to_char(sysdate,'DAY','nls_date_language=''AMERICAN''') from dual
union all
select to_char(sysdate,'DD') from dual
union all
select to_char(sysdate,'HH') from dual
union all
select to_char(sysdate,'HH24') from dual
union all
select to_char(sysdate,'AM') from dual
union all
select to_char(sysdate,'AM','nls_date_language=''AMERICAN''') from dual
union all
select to_char(sysdate,'MI') from dual
union all
select to_char(sysdate,'SS') from dual
union all
select to_char(sysdate,'WW') from dual
union all
select to_char(sysdate,'W') from dual
union all
select to_char(sysdate,'D') from dual
union all
select to_char(sysdate,'DDD') from dual
union all
select to_char(sysdate,'SSSSS') from dual
まとめ
Oracle TO_CHARで日付を変換した場合の使い方を紹介しました。
Oracleの日付書式の指定方法は色々あります。ここに掲載されていないものもあると思います。間違いや他の使い方などがあればコメントもらえるとうれしいです。
おつかれさまでした。