8.2. 通貨型

money型は貨幣金額を固定精度の小数点で格納します。 表8-3を参照してください。 小数点精度はデータベースのlc_monetary設定で決定されます。 '$1,000.00'などの典型的な通貨書式の他、整数、浮動小数点リテラルなど様々な書式の入力を受け付けます。 出力形式は通常は"典型的な"通貨書式となりますが、ロケールによって異なります。 引用符付けされていない数値は、その数値をtextに変換した後にmoneyに変換することでmoneyに変換することができます。 以下に例を示します。

SELECT 1234::text::money;

ロケールに依存しない方法でこの反対、すなわち、money値から数値型へのキャストを行う、簡単な方法はありません。 通貨記号と1000単位の区切り文字を把握しているのであれば、以下のようにregexp_replace()を使用することができます。

SELECT regexp_replace('52093.89'::money::text, '[$,]', '', 'g')::numeric;

このデータ型の出力はロケールにより変動しますので、これはlc_monetary設定が異なるデータベースにmoneyデータをロードする場合には動作しません。 この問題を防ぐためには、ダンプを新しいデータベースにリストアする前に、lc_monetaryがダンプを行ったデータベースと同じまたは等価であることを確認してください。

表 8-3. 通貨型

型名格納サイズ説明範囲
money8バイト貨幣金額-92233720368547758.08 から +92233720368547758.07