通貨型

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 8章データ型 | 早送り | 次のページ

# 8.2. 通貨型

`money`型は貨幣金額を固定精度の小数点で格納します。 表8-3を参照してください。 小数点精度はデータベースのlc_monetary設定で決定されます。この表が示すように範囲は小数点2桁を想定しています。 `'$1,000.00'`などの典型的な通貨書式の他、整数、浮動小数点リテラルなど様々な書式の入力を受け付けます。 出力形式は通常は"典型的な"通貨書式となりますが、ロケールによって異なります。

表 8-3. 通貨型

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

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

`numeric`、`int`そして`bigint`型は`money`型にキャストすることができます。`real`型や`double precision`型は最初に`numeric` 型にキャストした後に行なう必要があります。以下に例を示します。

    SELECT '12.34'::float8::numeric::money;

しかしこれは推奨されません。浮動小数点数値は丸めの可能性がありますので貨幣を扱うために使用すべきではありません。

`money`型の値は精度を落とすことなく`numeric`にキャストすることができます。 他の型への変換では精度を落とす可能性がありますので、２段階で行う必要があります。

    SELECT '52093.89'::money::numeric::float8;

`money`型の値を別の`money`型の値で除算すると、結果は`double precision`型（通貨ではなく純粋な数値）になります。 除算では通貨の単位は相殺されます。

前のページ | ホーム | 次のページ
数値データ型 | 上に戻る | 文字型