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.