データ型書式設定関数PostgreSQLの書式設定関数は多彩なデータ型(日付/時刻データ型、整数データ型、浮動小数点数データ型、数値データ型)を整形された文字列に変換したり、整形された文字列を特定のデータ型に変換する強力なツールの一式を提供しています。表9-20にこれらを列挙しています。これら関数は共通の呼び出し規約を踏襲しています。最初の引数は整形される値で二番目の引数は入力書式または出力書式を定義するテンプレートです。廃れたもので、新規に作成するコードでは使用すべきではありません。次のバージョンで削除する予定です。(to_char用)出力テンプレート文字列には、それが認識され、整形される値から適切に整形されたデータで置き換えられるパターンがあります。テンプレートパターンではない全てのテキストは単にそのままコピーされます。同様に、(to_char以外用)入力テンプレート文字列では、テンプレートパターンは入力されたデータ文字列の捜し出される部分と、そこで見つけ出される値を特定します。表9-21に、日付/時刻型の値の書式に使用可能なテンプレートパターンを示します。原文では4712BCとなっていますが、修正しています。時間帯名称(小文字)ある種の修飾子はどのようなテンプレートパターンに対しても、その振舞いを変更するために適用することができます。FMMonthはFM修飾子の付いたMonthパターンです。表9-22に、日付/時刻書式の修飾子パターンを示します。DDSP日付/時刻型書式の使用上の注意事項FMはパターンの出力を固定長にするため、先頭にはゼロ、後尾には空白を追加してしまう機能を無効にします。入力文字列の複数の空白スペースを無視します。FXはテンプレートの第一項目として指定される必要があります。to_charテンプレートでは、通常のテキストが許され、そのまま出力されます。部分文字列を二重引用符で括ることで、部分文字列にパターン用のキーワードがあったとしても、強制的にリテラルテキストとして解釈させることができます。"YYYY'ではYYYYは年データに置換されてしまいますが、Year内のYは置換されません。Month\\"'のようにその前にバックスラッシュを付けなければなりません。(文字列定数内のバックスラッシュは既に特別な意味を持つため、2つのバックスラッシュが必要です。)文字列をtimestamp型もしくはdate型にするYYYY変換は、年の値として4桁以上の数字を使用していると制限が加えられます。このような場合、数字以外の文字またはYYYYの後にテンプレートを使わなければなりません。しないと年は常に4桁と解釈されます。'YYYYMonDD')のように数字でない区切り符号の使用をお勧めします。文字列からtimestampやdateへの変換の際、YYYフィールドやYYYYフィールド、Y,YYYフィールドが存在する場合、CCフィールドは無視されます。CCフィールドをYYまたはYと一緒に使用した場合は、年は(CC-1)*100+YYとして計算されます。文字列型からtimestamp型への変換に際し、ミリ秒MSおよびマイクロ秒USの値は小数点の位置のあとの秒の部分として使用されます。'SS:MS')は3ミリ秒ではなく300ミリ秒です。0.3と計算されるからです。12:300は同じミリ秒数を指定します。3ミリ秒数が必要な場合には12:003のようにしなければなりません。12.003秒と計算します。2.021230秒です。to_char関数の曜日指定番号('D'書式パターンを参照)はextract関数の番号と異なっています。表9-23に、数値型の値の書式設定に使用可能なテンプレートパターンを示します。MIで整形された符号は、数値と関連付けられません。Oracleの実装では9に先行してMIが置かれてはならず、9の後にMIが置かれることを要求しています。9は9が並んでいる数と同じ桁数の値を出力します。桁が使用可能でない場合、空白を出力します。THはゼロ未満の値と小数は変換しません。PL、SG、およびTHはPostgreSQLの拡張です。Vは入力値を有効的に10^n乗します。ここでnはVに続く桁数です。to_char関数は小数点を含む数値とVとの混在をサポートしません。)表9-24に、to_char関数を使用した例をいくつか示します。