PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Le type de données Postgres NUMERIC peut-il stocker des valeurs signées ?

Vous pouvez certainement utiliser le type de précision arbitraire numeric avec une précision de 5 et une échelle de 1, tout comme @Simon l'a commenté, mais sans l'erreur de syntaxe. Utilisez une virgule (, ) au lieu du point (. ) dans le modificateur de type :

SELECT numeric(5,1) '-999.9' AS nr_lower
     , numeric(5,1) '9999.9' AS nr_upper;

 nr_lower | nr_upper
----------+----------
   -999.9 |   9999.9

Le signe moins et le point dans la chaîne littérale ne comptent pas dans le nombre maximal autorisé de chiffres significatifs (precision ).
Si vous n'avez pas besoin de limiter la longueur, utilisez simplement numeric .
Si vous devez appliquer un minimum et un maximum, ajoutez une contrainte de vérification :

CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric stocke votre numéro exactement . Si vous n'avez pas besoin de la précision absolue et que les petites erreurs d'arrondi ne posent aucun problème, vous pouvez également utiliser l'un des types à virgule flottante double precision (float8 ) ou real (float4 ).

Ou, puisque vous n'autorisez qu'un seul chiffre décimal fractionnaire, vous pouvez multiplier par 10 et utiliser integer , qui serait le stockage le plus efficace :4 octets, pas d'erreurs d'arrondi et traitement le plus rapide. Il suffit d'utiliser et de documenter correctement le numéro.

Détails pour les types numériques dans le manuel.