Du kan säkert använda den godtyckliga precisionstypen numeric
med en precision på 5 och en skala på 1, precis som @Simon kommenterade, men utan syntaxfel. Använd ett kommatecken(,
) istället för punkten (.
) i typmodifieraren:
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
Minustecknet och punkten i strängen räknas inte mot det tillåtna maximala antalet signifikanta siffror (precision
).
Om du inte behöver begränsa längden, använd bara numeric
.
Om du behöver tillämpa minimum och maximum, lägg till en kontrollbegränsning:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
lagrar ditt nummer exakt . Om du inte behöver den absoluta precisionen och små avrundningsfel är inga problem, kan du också använda en av flyttalstyperna double precision
(float8
) eller real
(float4
).
Eller eftersom du bara tillåter en enstaka decimalsiffra, kan du multiplicera med 10 och använda integer
, vilket skulle vara den mest effektiva lagringen:4 byte, inga avrundningsfel och snabbast bearbetning. Använd bara och dokumentera numret ordentligt.
Detaljer för numeriska typer i manualen.