Oracleの書式関数(日付を文字列書式に変換)の使い方をまとめていきます。
広告
日付を文字列書式に変換する
日付を文字列書式に変換する場合、TO_CHAR関数を使用します。
| 文法 | TO_CHAR(date[, format [,nls_param]]) | 
| 引数 | date:日付値 format:変換する書式 ※引数書式参照 nls_param:NLS_CURRENCYなどのNLSパラメータ | 
| 戻り値 | 日付値(date)を書式(format)で指定した書式に変換した値を返却します。 | 
引数書式
以下の書式を指定することで、変換後の表記を指定できます。
| 引数 | 表記 | 説明 | 
| AD | 紀元 | 紀元表記 (西暦1年以上は”西暦”、西暦1年より前は”紀元前”) | 
| BC | ||
| CC | 世紀 | 世紀表記(西暦1900年は19、2000 年は20 、2001年は21) | 
| SCC | 符号付きの世紀表記(紀元前はマイナス) | |
| E | 和暦 | 和暦略称のアルファベット表記 (明治:M / 大正:T / 昭和:S / 平成:Hなど) ※使用する場合はパラメータ(NLS_CALENDAR)を和暦にする必要がある。 | 
| EE | 和暦の日本語表記(”明治”、”大正”、”昭和”、”平成”など) ※使用する場合はパラメータ(NLS_CALENDAR)を和暦にする必要がある。 | |
| YYYY | 年 | 4桁の西暦 | 
| SYYYY | 4桁の西暦 ※符号付 | |
| YYY | 年の下3桁 | |
| YY | 年の下2桁 | |
| Y | 年の下1桁 | |
| SYEAR | 西暦年の英語表記 (西暦2000年は “TWO THOUSAND”、2022年は “TWENTY TWENTY-TWO”) | |
| YEAR | ||
| MM | 月 | 2桁の月表記(01~12) | 
| MON | 月の略称表記(1月~12月) ※パラメータ(NLS_DATE_LANGUAGE)に依存する。 | |
| MONTH | 月のフルスペル表記 ※日本語環境ではMONを指定した場合と変わらない。 | |
| RM | 月のローマ数字表記(I~XII) | |
| DD | 日 | 日にちを2桁で表示(01~31) | 
| D | 週の初め(日曜日)からの日にち(1~7) | |
| DDD | 年の初め(1月1日)からの日にち(001~366) | |
| DY | 曜日 | 曜日の略称(”日”~”土”) | 
| DAY | 曜日(”日曜日”~”土曜日”) | |
| AM | 午前午後 | “午前”/”午後”を表示 | 
| PM | ||
| HH | 時 | 時刻(時)を12時間で表示(01~12) | 
| HH12 | ||
| HH24 | 時刻(時)を24時間で表示(00~24) | |
| MI | 分 | 時刻(分)を表示(00~59) | 
| SS | 秒 | 時刻(秒)を表示(00~59) | 
| SSSSS | 1日の初め(0時0分0秒)からの秒数(00000~86399) | |
| Q | 期 | 4半期の表記 (1~3月:1 / 4~6月:2 / 7~9月:3 / 10~12月:4) | 
| IW | 週 | ISO8601規格での年の初めからの週(01~53) | 
| WW | 年の初めからの週(01~53) | |
| W | 月の初めからの週(1~5)※1日から7日が1週目 | 
使用例
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | SQL>-- 紀元 SQL>SELECT SYSDATE, TO_CHAR(SYSDATE, 'AD') as AD, TO_CHAR(SYSDATE-2030*365, 'BC') as BC FROM DUAL; SYSDATE   AD    BC --------- ----- --------- 22-05-10  西暦   紀元前 SQL> SQL>-- 世紀 SQL>SELECT SYSDATE, TO_CHAR(SYSDATE, 'CC') as CC, TO_CHAR(SYSDATE-2030*365, 'SCC') as SCC FROM DUAL; SYSDATE   CC    SCC  --------- ----- ---------  22-05-10  21    -01 SQL> SQL>-- 時代 SQL>ALTER SESSION SET NLS_CALENDAR='Japanese Imperial'; SQL>SELECT SYSDATE, TO_CHAR(SYSDATE, 'E') as E, TO_CHAR(SYSDATE, 'EE') as EE FROM DUAL; SYSDATE   E     EE  --------- ----- ---------  22-05-10  R     令和 SQL> SQL>-- 年月日時分秒 SQL>SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') as YMD,  TO_CHAR(SYSDATE, 'YEAR') as Y FROM DUAL; SYSDATE   YMD                  Y --------- -------------------- ----------------------------  22-05-10  2022-05-10 11:30:23  TWENTY TWENTY-TWO SQL> SQL>-- 週 SQL>SELECT SYSDATE, TO_CHAR(SYSDATE, 'WW') as WW, TO_CHAR(SYSDATE, 'W') as W, TO_CHAR(SYSDATE, 'D') as D, TO_CHAR(SYSDATE, 'DDD') as DDD FROM DUAL; SYSDATE   WW  W  D  DDD --------- --- -- -- ----  22-05-10  19  2  3  130  | 
 
							
						 
								
														
							