Postgresで数値を通貨としてフォーマットするには、数値をmoneyデータ型に変換するか、to_char()
を使用します。 適切な通貨記号を含むテキストに変換します。
これは明らかに、金額タイプを使用して番号がまだ保存されていないことを前提としています。
以下は、これらの各オプションの例です。
お金に変換
数値をお金のデータ型に変換する例を次に示します。
SELECT cast(12 as money);
結果:
$12.00
別の例を次に示します。今回はより多くの量を使用しています。
SELECT cast(123456.78 as money);
結果:
$123,456.78
浮動小数点数からの変換
丸め誤差の可能性があるため、お金を処理するために浮動小数点数を使用しないことをお勧めします。ただし、それを行う必要がある場合は、最初に数値に変換してから、お金に変換することができます。
SELECT '123456.78'::float8::numeric::money;
結果:
$123,456.78
浮動小数点からお金に直接変換しようとすると、エラーが発生します。
SELECT '123456.78'::float8::money;
結果:
ERROR: cannot cast type double precision to money
テキストに変換
to_char()
の使用例を次に示します。 値を通貨記号を含むテキストに変換します。
SELECT to_char(12, 'L99D99');
結果:
$12.00
ここでは、通貨記号と小数点以下の桁数の両方が現在のロケールを使用しています。
to_char()
のフォーマット文字列 予想される金額に対して適切である必要があります。
たとえば、金額が数十万に達する可能性がある場合は、次の形式の文字列がより適切です。
SELECT to_char(123456.78, 'L999G999D99');
結果:
$123,456.78
この場合、G
を追加しました ロケール対応のグループ区切り文字(「千単位の区切り文字」とも呼ばれます)のテンプレートパターン。カンマ(,
)を使用することもできます )、しかしそれはロケールを認識していなかったでしょう。
そして、もう一度D
を追加しました ロケール対応の小数点のテンプレートパターン。
フォーマット文字列からこれら2つのテンプレートパターンを削除するとどうなりますか。
SELECT to_char(123456.78, 'L999999');
結果:
$ 123457
重要でないゼロ
0
を使用できます 9
の代わりに 重要でないゼロを維持するため。
9
テンプレートパターンは重要でないゼロを削除しますが、0
テンプレートパターンはそうではありません。
これが2つの違いを説明する例です。
SELECT
to_char(12, 'L9999') AS "L9999",
to_char(12, 'L0000') AS "L0000";
結果:
L9999 | L0000 --------+-------- $ 12 | $ 0012
フィルモード
FM
と呼ばれる便利なテンプレートパターン修飾子があります 。これは「塗りつぶしモード」用であり、末尾のゼロと先頭の空白を抑制します。
したがって、その修飾子を使用して前の例を変更できます。
SELECT
to_char(12, 'LFM9999') AS "LFM9999",
to_char(12, 'LFM0000') AS "LFM0000";
結果:
LFM9999 | LFM0000 ---------+--------- $12 | $0012
ドル記号と数字の間の先頭の空白が抑制されていることに注意してください。