web-dev-qa-db-ja.com

PSQLのDECIMALとNUMERICデータ型の違い

postgreSQLでのdecimalおよびnumericデータ型の使用は何ですか。参考文献によると、以下はこれらのデータ型に与えられた説明です。

Decimal,numeric --> It is a user specified precision, exact and range up to 131072 digits before the decimal point and up to 16383 digits after the decimal point.

上記のステートメントは、decimalおよびnumericデータ型の説明を示しています。しかし、これらのデータ型の正確な使用方法と、他のデータ型の代わりに使用される場所についてはまだ理解していませんでした。

例と答えは大歓迎です...

30
mrg

マニュアルの右:

タイプdecimalnumericは同等です。どちらのタイプもSQL標準の一部です。

「なぜ使用する必要があるのか​​」に関しては、これもマニュアルで説明されています。

タイプnumericは、非常に多くの桁数の数値を格納でき、計算を正確に実行します

(エンファシス鉱山)。

小数点以下の数字が必要な場合は、decimal(またはnumeric)を使用します。小数点以下の数字が必要な場合は、integerまたはbigintを使用します。列タイプとしてのdecimalの一般的な使用法は、「製品価格」列または「金利」です。整数型の一般的な使用例は次のとおりです。 many製品の注文方法を格納する列(製品の「半分」を注文できないと仮定)。

doubleおよびrealも10進数値を格納できるタイプですが、approximateタイプです。つまり、保存した値を必ずしも取得する必要はありません。詳細については、以下を参照してください。 http://floating-point-gui.de/

36

https://www.postgresql.org/message-id/[email protected] から直接引用

Postgresには違いはありません。 SQL標準では両方の名前を受け入れる必要があるため、2つのタイプ名があります。標準を簡単に見てみると、唯一の違いは次のとおりです。

     17)NUMERIC specifies the data type exact numeric, with the decimal
        precision and scale specified by the <precision> and <scale>.

     18)DECIMAL specifies the data type exact numeric, with the decimal
        scale specified by the <scale> and the implementation-defined
        decimal precision equal to or greater than the value of the
        specified <precision>.

つまり、DECIMALの場合、実装では、小数点の左側で要求されたよりも多くの桁を許可できます。 Postgresはその自由を行使しないため、これらのタイプに違いはありません。

      regards, tom lane
10
geoyws

それらは相互の同義語であり、機能的には同じです。 SQL:20 標準では次のように書かれています:

21) NUMERIC specifies the data type
    exact numeric, with the decimal
    precision and scale specified by the
    <precision> and <scale>.

22) DECIMAL specifies the data type
    exact numeric, with the decimal scale
    specified by the <scale> and the
    implementation-defined decimal
    precision equal to or greater than the
    value of the specified <precision>.
4
Rahul Tripathi