他のバージョンの文書 : 18 | 17 | 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_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)
AM、am、 PM、または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桁
BC、bc、 AD、または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四半期(to_dateとto_timestampは無視します)
RM大文字ローマ数字による月(I〜XII、Iは1月)
rm小文字ローマ数字による月(i〜xii、iは1月)
TZ大文字による時間帯省略名(to_char内でのみサポートされる)
tz小文字による時間帯省略名(to_char内でのみサポートされる)
OFUTCからの時間帯オフセット(to_char内でのみサポートされる)

どのようなテンプレートパターンに対しても、その振舞いを変更するために修飾子を適用できます。 例えば、FMMonthはFM修飾子の付いた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科学技術表記法用の指数

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

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

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

修飾子説明例
FM添え字字詰めモード(先頭の0、および空白の埋め字を無効)FM9999
TH添え字大文字による序数添え字999TH
th添え字子文字による序数添え字999th

表9.28「to_charの例」に、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, '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'