In PostgreSQL, vorrei memorizzare i valori firmati -999.9
- 9999.9
. Posso usare numeric(5.1)
per questo?Il tipo di dati Postgres può contenere valori firmati NUMERIC?
O che tipo dovrei usare?
In PostgreSQL, vorrei memorizzare i valori firmati -999.9
- 9999.9
. Posso usare numeric(5.1)
per questo?Il tipo di dati Postgres può contenere valori firmati NUMERIC?
O che tipo dovrei usare?
È possibile utilizzare lo arbitrary precision type numeric
con una precisione di 5 e una scala di 1, just like @Simon commented, ma senza l'errore di sintassi. Utilizzare una virgola (,
) al posto del punto (.
) nel tipo di modifica:
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 contro il massimo consentito di cifre significative (precision
).
Se non è necessario limitare la lunghezza, utilizzare solo numeric
.
Se è necessario far rispettare minimo e massimo, aggiungere un check constraint:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
memorizza il tuo numero di esattamente. Se non è necessaria la precisione assoluta e gli errori di arrotondamento minimi non sono un problema, è possibile utilizzare uno dei tipi a virgola mobile double precision
(float8
) o real
(float4
).
Oppure, poiché si consente solo una singola cifra decimale frazionaria, è possibile moltiplicare per 10 e utilizzare integer
, che sarebbe la memoria più efficiente: 4 byte, nessun errore di arrotondamento e elaborazione più veloce. Basta usare e documentare correttamente il numero.
Grazie a @Erwin, ottima risposta! –
La precisione di un numerico PostgreSQL è il numero totale di cifre significative, e la scala è il numero di decimali richiesti. 9999.9 ha 5 cifre e 1 decimale, quindi sì, 'numerico (5.1)' sarà OK. Vedere [la documentazione] (http://www.postgresql.org/docs/9.3/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL) per i dettagli. –
è numerico (5.1) OK per -999.9? –
Perché non provi ad inserire un valore negativo e vedi cosa succede? Ad ogni modo, 'numeric' è parte dello standard sql e sì, è firmato. –