Със сигурност можете да използвате произволния тип прецизност numeric
с точност от 5 и скала от 1, точно както коментира @Simon, но без синтактична грешка. Използвайте запетая (,
) вместо точката (.
) в модификатора на типа:
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
Знакът минус и точката в литерала на низа не се отчитат от разрешения максимум значими цифри (precision
).
Ако не е необходимо да ограничавате дължината, просто използвайте numeric
.
Ако трябва да наложите минимум и максимум, добавете ограничение за проверка:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
съхранява вашия номер точно . Ако не се нуждаете от абсолютна прецизност и малки грешки при закръгляването не са проблем, можете също да използвате един от типовете с плаваща запетая double precision
(float8
) или real
(float4
).
Или, тъй като допускате само една дробна десетична цифра, можете да умножите по 10 и да използвате integer
, което би било най-ефективното съхранение:4 байта, без грешки при закръгляване и най-бърза обработка. Просто използвайте и документирайте номера правилно.
Подробности за цифровите типове в ръководството.