★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

6.7. データ型フォーマッティング関数

PostgreSQL のフォーマッティング関数は多彩なデータ型 (日付/時刻データ型、整数データ型、浮動小数点数データ型、数値データ型)をフォーマットされた文字列変換したり、フォーマットされた文字列を特定のデータ型に変換する強力なツールの一式を提供しています。 Table 6-12 にこれらをリストしています。これら関数は共通の呼び出し規約を踏襲しています。最初の引数はフォーマットされる値で二番目の引数は入力フォーマットまたは出力フォーマットを定義するテンプレートです。

Table 6-12. フォーマッティング関数

関数返り値説明
to_char(timestamp, text)text (テキスト)timestamp 型を文字列型に変換to_char(timestamp 'now','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, '999D9')
to_char(numeric, text)text (テキスト)数値型を文字列型に変換to_char(numeric '-125.8', '999D99S')
to_date(text, text)date文字列型を日付型に変換to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text)timestamp文字列型を timestamp 型に変換to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text)numeric文字列型を数値型に変換to_number('12,454.8-', '99G999D9S')

出力テンプレート文字列には、それが認識され、フォーマットされる値から適切にフォーマットされたデータで置き換えられるパターンがあります。テンプレートパターンですべてのテキストは単にそのままコピーされます。同様に、入力テンプレート文字列では、テンプレートパターンは入力されたデータ文字列の捜し出される部分と、そこで見つけ出される値を特定します。

Table 6-13 に、日付/時刻型の値のフォーマットに使用可能なテンプレートパターンを示します。

Table 6-13. 日付/時刻型のテンプレートパターン

パターン説明
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)
AMA.M.PMP.M.午前/午後の指定 (大文字)
ama.m.pmp.m.午前/午後の指定 (小文字)
Y,YYYコンマ付き年 (4桁以上)
YYYY年(4桁以上)
YYY年の終り 3 桁
YY年の終り 2 桁
Y年の終り 1 桁
BCB.C.ADA.D.紀元前後の指定 (大文字)
bcb.c.ada.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 文字)
DDD1 年通算の日にち (001-366)
DD1 月通算の日にち (01-31)
D1 週通算の日にち (1-7: 日曜日=1)
W月中の週番号 (1-5) でその月の初日がある週が第 1 週
WW年間を通じた週番号 (1-53) で元旦のある週が第 1 週
IWISO 週番号 (新年の最初の木曜日がある週が第 1 週)
CC世紀 (2 桁)
Jユリウス日 (紀元前 4712 年 1 月 1 日からの通算経過日)
Qquarter (四半期)
RMローマ数字による月 (I-XII: I=月曜日) - 大文字
rmローマ数字による月 (I-XII: I=月曜日) - 小文字
TZ時間帯名称 - 大文字
tz時間帯名称 - 小文字

どのようなテンプレートパターンに対しても、その振舞いを変更するためにある種の修飾子を適用することができます。例えば、"FMMonth""FM" の付いた "Month" パターンです。 Table 6-14 に、日付/時刻フォーマットの修飾子パターンを示します。

Table 6-14. 日付/時刻変換のテンプレートパターン修飾子

修飾子説明
FM 接頭辞字詰めモード (空白およびゼロのパディングを無効)FMMonth
TH 接尾辞大文字の序数を追加DDTH
th 接尾辞小文字の序数を追加DDth
FX 接頭辞固定フォーマットのグローバルオプション (使用上の注意事項参照)FX Month DD Day
SP 接尾辞スペルモード (未実装)DDSP

日付/時刻型フォーマットの使用上の注意事項

Table 6-15 に、数値型の値のフォーマットに使用可能なテンプレートパターンを示します。

Table 6-15. 数値変換のテンプレートパターン

パターン説明
9指定された桁数での値
0前にゼロが付いた値
. (終止符)小数点
, (コンマ)グループ (3 桁) 区切り符号
PR負の値の角括弧表示
S(ロケール使用)マイナス記号付き負の値
L(ロケール使用)通貨記号
D(ロケール使用)小数点
G(ロケール使用)グループ区切り符号
MI(数値 < 0 であれば) 指定位置にマイナス記号
PL(数値 > 0 であれば) 指定位置にプラス記号
SG指定された位置にプラス/マイナス記号
RN(1 〜 3999 の入力値による)ローマ数字
TH または th序数変換
Vn 桁シフト (注意事項を参照)
EEEE科学技術表記法 (未実装)

数値型フォーマットの使用上の注意事項

Table 6-16 に、to_char 関数を使用した例をいくつか示します。

Table 6-16. to_char の例

入力出力
to_char(now(),'Day, DD HH12:MI:SS')'Tuesday , 06 05:39:18'
to_char(now(),'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,'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,'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'