web-dev-qa-db-fra.com

Différence entre le type de données DECIMAL et NUMERIC dans PSQL

à quoi servent les types de données decimal et numeric dans postgreSQL. Selon la référence, ce qui suit est l'explication donnée à ces types de données.

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.

L'instruction ci-dessus montre la description du type de données decimal et numeric. Mais, je ne comprenais toujours pas quelle est l'utilisation exacte de ces types de données et où ils sont utilisés à la place d'autres types de données.

La réponse avec l'exemple est très appréciée ...

30
mrg

directement dans le manuel:

Les types decimal et numeric sont équivalents. Les deux types font partie de la norme SQL.

Quant au "pourquoi dois-je l'utiliser", il est également expliqué dans le manuel:

Le type numérique peut stocker des nombres avec un très grand nombre de chiffres et effectuer des calculs exactement

(Je souligne).

Si vous avez besoin de nombres avec des décimales, utilisez decimal (ou numeric) si vous avez besoin de nombres sans décimales, utilisez integer ou bigint. Une utilisation typique de decimal comme type de colonne serait une colonne "prix du produit" ou un "taux d'intérêt". Une utilisation typique d'un type entier serait par exemple une colonne qui stocke comment beaucoup produits ont été commandés (en supposant que vous ne pouvez pas commander "la moitié" d'un produit).

double et real sont également des types qui peuvent stocker des valeurs décimales, mais ce sont des types approximatifs . Cela signifie que vous ne récupérez pas nécessairement la valeur que vous avez stockée. Pour plus de détails, veuillez consulter: http://floating-point-gui.de/

36

Cité directement de https://www.postgresql.org/message-id/[email protected]

Il n'y a aucune différence, à Postgres. Il existe deux noms de types car la norme SQL nous oblige à accepter les deux noms. En un coup d'œil dans la norme, il apparaît que la seule différence est la suivante:

     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>.

c'est-à-dire que pour DECIMAL, l'implémentation est autorisée à autoriser plus de chiffres que demandé à gauche du séparateur décimal. Postgres n'exerce pas cette liberté, il n'y a donc pas de différence entre ces types pour nous.

      regards, tom lane
10
geoyws

Ils sont synonymes les uns des autres et fonctionnellement identiques. La norme SQL: 20 dit:

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