Z pewnością możesz użyć dowolnego typu precyzji numeric
z dokładnością 5 i skalą 1, tak jak skomentował @Simon, ale bez błędu składni. Użyj przecinka (,
) zamiast kropki (.
) w modyfikatorze typu:
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
Znak minus i kropka w literale ciągu nie wliczają się do dozwolonego maksimum cyfr znaczących (precision
).
Jeśli nie musisz ograniczać długości, po prostu użyj numeric
.
Jeśli chcesz wymusić minimum i maksimum, dodaj ograniczenie sprawdzające:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
przechowuje Twój numer dokładnie . Jeśli nie potrzebujesz bezwzględnej precyzji, a drobne błędy zaokrąglania nie stanowią problemu, możesz również użyć jednego z typów zmiennoprzecinkowych double precision
(float8
) lub real
(float4
).
Lub, ponieważ zezwalasz tylko na jedną ułamkową cyfrę dziesiętną, możesz pomnożyć przez 10 i użyć integer
, która byłaby najbardziej wydajną pamięcią:4 bajty, bez błędów zaokrąglania i najszybsze przetwarzanie. Wystarczy użyć i odpowiednio udokumentować numer.
Szczegóły dotyczące typów liczb w podręczniku.