★PostgreSQLカンファレンス2021 11月12日開催/チケット販売中★
他のバージョンの文書 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.25にこれらを列挙しています。 これら関数は共通の呼び出し規約を踏襲しています。最初の引数は整形される値で2番目の引数は入力書式または出力書式を定義するテンプレートです。

表9.25 書式設定関数

関数

説明

to_char ( timestamp, text ) → text

to_char ( timestamp with time zone, text ) → text

与えられた書式設定にしたがってタイムスタンプを文字列に変換します。

to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS')05:31:12

to_char ( interval, text ) → text

与えられた書式設定にしたがって時間間隔を文字列に変換します。

to_char(interval '15h 2m 12s', 'HH24:MI:SS')15:02:12

to_char ( numeric_type, text ) → text

与えられた書式設定にしたがって数値を文字列に変換します。integerbigintnumericrealdouble precisionで利用可能です。

to_char(125, '999')125

to_char(125.8::real, '999D9')125.8

to_char(-125.8, '999D99S')125.80-

to_date ( text, text ) → date

与えられた書式設定にしたがって文字列を日付に変換します。

to_date('05 Dec 2000', 'DD Mon YYYY')2000-12-05

to_number ( text, text ) → numeric

与えられた書式設定にしたがって文字列を数値に変換します。

to_number('12,454.8-', '99G999D9S')-12454.8

to_timestamp ( text, text ) → timestamp with time zone

与えられた書式設定にしたがって文字列をタイムスタンプに変換します。 (表 9.32to_timestamp(double precision)もご覧ください。)

to_timestamp('05 Dec 2000', 'DD Mon YYYY')2000-12-05 00:00:00-05


ヒント

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

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

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

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

パターン説明
HH時 (01–12)
HH12時 (01–12)
HH24時 (00–23)
MI分 (00–59)
SS秒 (00–59)
MSミリ秒 (000–999)
USマイクロ秒 (000000–999999)
FF110分の1秒 (0–9)
FF2100分の1秒 (00–99)
FF3ミリ秒 (000–999)
FF410分の1ミリ秒 (0000–9999)
FF5100分の1ミリ秒 (00000–99999)
FF6マイクロ秒 (000000–999999)
SSSS, SSSSS深夜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)まで
IDISO 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.27に、日付/時刻書式の修飾子パターンを示します。

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

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

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

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

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

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

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

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

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

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

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

表9.30 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'