Top > SQL 関数一覧 (T‐Z) > TO_CHAR(日付)

日時式、日付型をフォーマットする、曜日、和暦を求める

数値式をフォーマットする

syntax

  • TO_CHAR ( expr [, format [, nls_param]] )
  • TO_NCHAR ( expr [, format [, nls_param]] )

return [ string ]

TO_NCHAR 関数は TO_CHAR 関数の戻り値を各国語キャラクタセット NCHAR としたもの

parameter

return

  • フォーマット書式に従って変換された文字列、または、データベースキャラクタセット文字列

avail

  • SQL および PL/SQL の両方で使用可能。

日付書式のフォーマット文字列

各国語サポートパラメータ

NLS_CALENDAR についてはグローバリゼーション・サポート・ガイド参照

nls_param の種類設定例
NLS_DATE_LANGUAGEENGLISH
NLS_CALENDAR'JAPANESE IMPERIAL'(要クォート)

日付のフォーマット使用例

DATE 型のデフォルトの書式は NLS_DATE_FORMAT でフォーマットされる。TIMESTAMP 型は NLS_TIMESTAMP_FORMAT。タイムゾーン付きの場合には NLS_TIMESTAMP_TZ_FORMAT によってフォーマットされる。

TO_CHAR( DATE '2005-06-07', 'RRMMDD') ⇒ '050607'

日付と時刻のフォーマット使用例

TO_CHAR ( TIMESTAMP '2000-01-02 04:05:06', 'YYYY/MM/DD HH24:MI:SS DAY')
⇒ 2000/01/02 04:05:06 日曜日

日付に関する豆知識

曜日を求める

TO_CHAR 関数で曜日を取得することも可能(和名、または、英名)

曜日を取得するには 書式指定に 'DAY' を指定する。
日本の曜日はすべて同じ長さなので関係ないが、英語の曜日には一番長い 'Wednesday' の長さにあわせるために空白が付けられている。

TO_CHAR( SYSDATE, 'Day', 'NLS_DATE_LANGUAGE = ENGLISH') ⇒ 'Friday___'
TO_CHAR( SYSDATE, 'FMDay', 'NLS_DATE_LANGUAGE = ENGLISH') ⇒ 'Friday'
TO_CHAR( SYSDATE, 'Day') ⇒ '金曜日'

日本語の曜日表記では違いがわからないが 'DAY'(すべて大文字),'Day'(先頭のみ大文字),'day'(全て小文字) のように異なる。

指定の日付の曜日番号を取得する DAYOFWEEK_TO_NUMBER ファンクション

TO_CHAR の 'D' 書式は週初めからの日数(1 オリジン)を戻し、国毎に (NLS_TERRITORY) で異なる。(※1)
日本やアメリカは日曜はじまりで日曜日の場合 '1' を戻し、欧州では月曜はじまりで日曜の場合 '7' を戻す。

CREATE OR REPLACE FUNCTION RIVUS.DAYOFWEEK_TO_NUMBER(
	P_DATE IN DATE
)
RETURN BINARY_INTEGER IS
BEGIN
	-- ISO-8601(1:Mon/2:Tue/3:Wed/4:Thu/5:Fri/6:Sat/7:Sun)
	-- 非公開 NLS パラメータ値
	-- RETURN TO_NUMBER(TO_CHAR(P_DATE,'DAY','NLS_DATE_LANGUAGE=''NUMERIC DATE LANGUAGE'''));
	RETURN MOD(TO_NUMBER(TO_CHAR(P_DATE, 'J')), 7) + 1;
END;
/

(※1) NLS_TERRITORY は 引数 nls_param に指定できない。

指定の日付の元号(年号)を取得する NAME_OF_ERA ファンクション

デフォルトではシステム日付における元号を戻す。

CREATE OR REPLACE FUNCTION RIVUS.NAME_OF_ERA(
	P_BASEDATE IN DATE := SYSDATE)
RETURN VARCHAR2 IS
BEGIN
	RETURN TO_CHAR(P_BASEDATE, 'EE', 'NLS_CALENDAR=''JAPANESE IMPERIAL''');
END;
/

年月のみの指定では1つの元号に決まらない場合がある。1989年1月7日まで昭和、2019年4月30日まで平成、2019年5月1日以降は令和
NLS_CALENDAR を新元号 令和に対応させる

和暦表示を行なう

元号名(年号)を取得する

SQL> select TO_CHAR(sysdate , 'EE', 'nls_calendar=''japanese imperial''') era
  2   from dual;
 
ERA
------------------------------------------------------------
令和

和暦で表示する

SQL> select TO_CHAR(date '1900-01-01', 'eedl', 'nls_calendar=''japanese imperial''')
  2  from dual;
 
TO_CHAR(DATE'1900-01-01','EEDL','NLS_CALEN
------------------------------------------
明治33年1月1日 月曜日

(補足) 和暦表記の文字列を西暦の日付型に変換する例

TO_DATE の各国語サポートパラメータ nls_param を使用することで元号名(年号)を使った和暦表記文字列を日付に変換することもできる。

和暦を日付型に変換する (詳細は TO_DATE へ)

SQL> select
  2     to_date('平成19-01-01', 'EEYY-MM-DD', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') ee_date
  3   from dual;
 
EE_DATE
-------------------
2007-01-01 00:00:00
 


SQL 関数 - TO_CHAR 関連

関連事項

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー