W PostgreSQL, chciałbym przechowywać podpisane wartości -999.9
- 9999.9
. Czy mogę użyć do tego celu numeric(5.1)
?Czy typ danych Postgres NUMERIC może przechowywać wartości podpisane?
Albo jakiego typu powinienem użyć?
W PostgreSQL, chciałbym przechowywać podpisane wartości -999.9
- 9999.9
. Czy mogę użyć do tego celu numeric(5.1)
?Czy typ danych Postgres NUMERIC może przechowywać wartości podpisane?
Albo jakiego typu powinienem użyć?
Z pewnością można użyć wartości arbitrary precision type numeric
z dokładnością do 5 i skalą 1, just like @Simon commented, ale bez błędu składni. Użyj przecinka (,
) zamiast kropki (.
) w modyfikatora 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 łańcuchu dosłowny nie wliczają dozwolonego maksimum znaczących cyfr (precision
).
Jeśli nie musisz ograniczać długości, po prostu użyj numeric
.
Jeśli trzeba wymusić minimalną i maksymalną, dodać check constraint:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
przechowuje numer dokładnie. Jeśli nie potrzebujesz absolutnej precyzji, a małe błędy zaokrąglania nie stanowią problemu, możesz również użyć jednego z typów zmiennoprzecinkowych: double precision
(float8
) lub (float4
).
Albo, ponieważ dopuszcza się tylko jedną ułamkową cyfrę dziesiętną, można pomnożyć przez 10 i użyć integer
, która byłaby najbardziej wydajną pamięcią: 4 bajty, brak błędów zaokrąglania i najszybsze przetwarzanie. Wystarczy użyć i udokumentować numer poprawnie.
Dzięki @Erwin, świetna odpowiedź! –
precyzją postgresql numeryczna jest całkowita liczba cyfr znaczących, a skala jest liczba miejsc po przecinku wymagane. 9999.9 ma 5 cyfr i 1 miejsce dziesiętne, więc tak, "numeryczne (5.1)" będzie w porządku. Aby uzyskać szczegółowe informacje, patrz [dokumentacja] (http://www.postgresql.org/docs/9.3/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL). –
jest numeryczne (5.1) OK dla -999,9? –
Dlaczego nie spróbować wstawić wartości ujemnej i zobaczyć, co się dzieje? W każdym razie, 'numeric' jest częścią standardu sql i tak, jest podpisany. –