PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il tipo di dati Postgres NUMERIC può memorizzare valori con segno?

Puoi certamente usare il tipo di precisione arbitraria numeric con una precisione di 5 e una scala di 1, proprio come ha commentato @Simon, ma senza l'errore di sintassi. Usa una virgola(, ) invece del punto (. ) nel modificatore di tipo:

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

Il segno meno e il punto nella stringa letterale non contano per il massimo consentito di cifre significative (precision ).
Se non hai bisogno di limitare la lunghezza, usa semplicemente numeric .
Se devi applicare il minimo e il massimo, aggiungi un vincolo di controllo:

CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric memorizza il tuo numero esattamente . Se non hai bisogno della precisione assoluta e piccoli errori di arrotondamento non sono un problema, potresti anche usare uno dei tipi a virgola mobile double precision (float8 ) o real (float4 ).

Oppure, poiché consenti solo una singola cifra decimale frazionaria, puoi moltiplicare per 10 e utilizzare integer , che sarebbe la memoria più efficiente:4 byte, nessun errore di arrotondamento ed elaborazione più veloce. Basta usare e documentare correttamente il numero.

Dettagli per i tipi numerici nel manuale.