★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.8. データ型書式設定関数

PostgreSQLの書式設定関数は多彩なデータ型(日付/時刻データ型、整数データ型、浮動小数点数データ型、数値データ型)を整形された文字列に変換したり、整形された文字列を特定のデータ型に変換する強力なツールの一式を提供しています。 表 9.23にこれらを列挙しています。 これら関数は共通の呼び出し規約を踏襲しています。最初の引数は整形される値で2番目の引数は入力書式または出力書式を定義するテンプレートです。

表9.23 書式設定関数

関数戻り値説明
to_char(timestamp, text) textタイムスタンプを文字列に変換to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text)text時間間隔を文字列に変換to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text)text整数を文字列に変換to_char(125, '999')
to_char(double precision, text)text実数、倍精度数を文字列に変換to_char(125.8::real, '999D9')
to_char(numeric, text)text数値を文字列に変換to_char(-125.8, '999D99S')
to_date(text, text) date文字列を日付に変換to_date('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text) numeric文字列を数値に変換to_number('12,454.8-', '99G999D9S')
to_timestamp(text, text) timestamp with time zone文字列をタイムスタンプに変換to_timestamp('05 Dec 2000', 'DD Mon YYYY')

注記

引数が1つのto_timestamp関数もあります。 表 9.30を参照して下さい。

ヒント

to_timestampto_dateは、単純なキャストでは変換できない入力フォーマットを処理するために存在します。 ほとんどの標準的日付および時刻のフォーマットに対しては、入力文字列を必要なデータ型に単純にキャストすれば動作し、その方がずっと簡単です。 同様に、to_numberも標準的な数値表現に対しては不要です。

to_char用の出力テンプレート文字列には、値に基づいて認識され、適切に整形されたデータで置き換えられるパターンがあります。 テンプレートパターンではない全てのテキストは単にそのままコピーされます。 同様に、(その他の関数用の)入力テンプレート文字列では、テンプレートパターンは入力されたデータ文字列で供給される値を特定します。 テンプレート文字列中にテンプレートパターンではない文字があれば、(テンプレート文字列の文字と同じかどうかにかかわらず)入力文字列データ中の該当文字は単にスキップされます。

表 9.24に、日付/時刻型の値の書式に使用可能なテンプレートパターンを示します。

表9.24 日付/時刻型の書式テンプレートパターン

パターン説明
HH時(01〜12)
HH12時(01〜12)
HH24時(00〜23)
MI分(00〜59)
SS秒(00〜59)
MSミリ秒(000〜999)
USマイクロ秒(000000〜999999)
SSSS深夜0時からの秒数(0〜86399)
AMamPM、またはpm午前/午後の指定(ピリオドなし)
A.M.a.m.P.M.、またはp.m.午前/午後の指定(ピリオド付き)
Y,YYYコンマ付き年(4桁以上)
YYYY年(4桁以上)
YYY年の下3桁
YY年の下2桁
Y年の下1桁
IYYYISO 8601週番号年(4桁以上)
IYYISO 8601週番号年の下3桁
IYISO 8601週番号年の下2桁
IISO 8601週番号年の下1桁
BCbcAD、またはad紀元前後の指定(ピリオドなし)
B.C.b.c.A.D.、またはa.d.紀元前後の指定(ピリオド付き)
MONTH大文字での完全な月名(9文字になるように空白文字を埋める)
Month大文字で書き始める完全な月名(9文字になるように空白文字を埋める)
month小文字での完全な月名(9文字になるように空白文字を埋める)
MON大文字での短縮形の月名(英語では3文字、現地語化された場合は可変長)
Mon大文字で書き始める短縮形の月名(英語では3文字。現地語化された場合は可変長)
mon小文字での短縮形の月名(英語では3文字。現地語化された場合は可変長)
MM月番号(01〜12)
DAY大文字での完全な曜日名(9文字になるように空白文字を埋める)
Day大文字で書き始める完全な曜日名(9文字になるように空白文字を埋める)
day小文字での完全な曜日名(9文字になるように空白文字を埋める)
DY短縮形の大文字での短縮形の曜日名(英語では3文字。現地語化された場合は可変長)
Dy大文字で書き始める短縮形の曜日名(英語では3文字。現地語化された場合は可変長)
dy小文字での短縮形の曜日名(英語では3文字。現地語化された場合は可変長)
DDD通年の日にち番号(001〜366)
IDDDISO 8601週番号年の日にち番号(001-371:通年 第1日は最初のISO週の月曜日)
DD月内の日にち番号(01〜31)
D曜日番号、日曜日(1)から土曜日(7)まで
ID 
ISO 8601の曜日番号、月曜日(1)から日曜日(7)まで 
W月中の週番号(1〜5)(その月の初日がある週が第1週)
WW年間を通じた週番号(1〜53)(元日のある週が第1週)
IWISO 8601週番号年の年間を通じた週番号(01 - 53:新年の最初の木曜日がある週が第1週)
CC世紀(2桁。21世紀は2001-01-01から開始)
Jユリウス日(UTC紀元前4714年11月24日午前零時からの整数による通算経過日)
Q四半期
RM大文字ローマ数字による月(I〜XII、Iは1月)
rm小文字ローマ数字による月(i〜xii、iは1月)
TZ大文字による時間帯省略名(to_char内でのみサポートされる)
tz小文字による時間帯省略名(to_char内でのみサポートされる)
TZHtime-zoneの時間
TZMtime-zoneの分
OFUTCからの時間帯オフセット(to_char内でのみサポートされる)

どのようなテンプレートパターンに対しても、その振舞いを変更するために修飾子を適用できます。 例えば、FMMonthFM修飾子の付いたMonthパターンです。 表 9.25に、日付/時刻書式の修飾子パターンを示します。

表9.25 日付/時刻書式用のテンプレートパターン修飾子

修飾子説明
FM接頭辞字詰めモード(先頭の0、およびを空白のパディングを無効)FMMonth
TH接尾辞DDTH、例えば12TH 
th接尾辞DDth、例えば12th 
FX接頭辞固定書式のグローバルオプション(使用上の注意事項を参照)FX Month DD Day
TM接頭辞翻訳モード(lc_timeに基づき、現地語化された曜日、月名を表示します)TMMonth
SP接尾辞スペルモード(未実装)DDSP

日付/時刻型書式の使用上の注意事項は次のとおりです。

表 9.26に、数値の書式設定に使用可能なテンプレートパターンを示します。

表9.26 数値書式用のテンプレートパターン

パターン説明
9数字の位置(必要ないときは表示しない)
0数字の位置(必要ないときでも表示する)
.(ピリオド)小数点
, (コンマ)千単位で区切る符号
PR負の値の角括弧表示
S符号付き値(ロケールを使用)
L通貨記号(ロケールを使用)
D小数点(ロケールを使用)
Gグループ区切り文字(ロケールを使用)
MI(数値 < 0であれば)指定位置にマイナス記号
PL(数値 > 0であれば)指定位置にプラス記号
SG指定された位置にプラス/マイナス記号
RNローマ数字(入力は1~3999)
THまたはth序数接尾辞
Vn 桁シフト(注意事項を参照)
EEEE科学技術表記法用の指数

数値型書式の使用上の注意事項は次のとおりです。

すべてのテンプレートについて、その動作を変えるために、いくつかの修飾子を適用できます。 例えば、FM99.99FM修飾子が付いた99.99パターンです。 表 9.27に、数値の書式用の修飾子パターンを示します。

表9.27 数値の書式用テンプレートパターン修飾子

修飾子説明
FM添え字字詰めモード(末尾の0と空白の埋め字を無効にする)FM99.99
TH添え字大文字による序数添え字999TH
th添え字子文字による序数添え字999th

表 9.28に、to_char関数を使用した例をいくつか示します。

表9.28 to_charの例

結果
to_char(current_timestamp, 'Day, DD  HH12:MI:SS')'Tuesday  , 06  05:39:18'
to_char(current_timestamp, 'FMDay, FMDD  HH12:MI:SS')'Tuesday, 6  05:39:18'
to_char(-0.1, '99.99')'  -.10'
to_char(-0.1, 'FM9.99')'-.1'
to_char(-0.1, 'FM90.99')'-0.1'
to_char(0.1, '0.9')' 0.1'
to_char(12, '9990999.9')'    0012.0'
to_char(12, 'FM9990999.9')'0012.'
to_char(485, '999')' 485'
to_char(-485, '999')'-485'
to_char(485, '9 9 9')' 4 8 5'
to_char(1485, '9,999')' 1,485'
to_char(1485, '9G999')' 1 485'
to_char(148.5, '999.999')' 148.500'
to_char(148.5, 'FM999.999')'148.5'
to_char(148.5, 'FM999.990')'148.500'
to_char(148.5, '999D999')' 148,500'
to_char(3148.5, '9G999D999')' 3 148,500'
to_char(-485, '999S')'485-'
to_char(-485, '999MI')'485-'
to_char(485, '999MI')'485 '
to_char(485, 'FM999MI')'485'
to_char(485, 'PL999')'+485'
to_char(485, 'SG999')'+485'
to_char(-485, 'SG999')'-485'
to_char(-485, '9SG99')'4-85'
to_char(-485, '999PR')'<485>'
to_char(485, 'L999')'DM 485'
to_char(485, 'RN')'        CDLXXXV'
to_char(485, 'FMRN')'CDLXXXV'
to_char(5.2, 'FMRN')'V'
to_char(482, '999th')' 482nd'
to_char(485, '"Good number:"999')'Good number: 485'
to_char(485.8, '"Pre:"999" Post:" .999')'Pre: 485 Post: .800'
to_char(12, '99V999')' 12000'
to_char(12.4, '99V999')' 12400'
to_char(12.45, '99V9')' 125'
to_char(0.0004859, '9.99EEEE')' 4.86e-04'