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;
/

和暦表示を行なう

年号を取得する

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
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター