2015-11-16 22 views
8

jaki jest typ danych w PostgreSQL w postaci decimal i numeric. Zgodnie z odnośnikiem poniżej podano wyjaśnienie dla tych typów danych.Różnica między typem danych DECIMAL i NUMERIC w PSQL

Decimal,numeric --> It is a user specified precision, exact and range up to 131072 digits before the decimal point and up to 16383 digits after the decimal point. 

Powyższe zestawienie pokazuje opis decimal i numeric typu danych. Ale nadal nie rozumiem, jakie jest dokładne użycie tych typów danych i gdzie są one używane zamiast innych typów danych.

Odpowiedź z przykładu jest bardzo doceniane ...

+0

Krzyż postu: http://dba.stackexchange.com/q/121196/1822 –

Odpowiedz

13

Right from the manual:

Rodzaje decimal i numeric są równoważne. Oba typy są częścią standardu SQL.

chodzi o „dlaczego muszę go używać”, jest to również wyjaśnione w podręczniku:

typ numeryczny może przechowywać numery z bardzo dużą liczbą cyfr i wykonywania obliczeń dokładnie

(Podkreślenie).

Jeśli potrzebujesz liczb z miejscami po przecinku, użyj decimal (lub numeric) jeśli trzeba numerów bez miejsc po przecinku, użyj integer lub bigint. Typowym zastosowaniem decimal jako typu kolumny byłaby kolumna "cena produktu" lub "stopa procentowa". Typowym zastosowaniem typu integer byłoby np. kolumna przechowująca, w jaki sposób zamówiono wiele produktów (zakładając, że nie można zamówić "połowy" produktu).

double i real to również typy, które mogą przechowywać wartości dziesiętne, ale są to typy przybliżone. Oznacza to, że nie musisz odzyskać zapisanej wartości. Aby uzyskać szczegółowe informacje, zobacz: http://floating-point-gui.de/

1

Są one synonimem siebie nawzajem i funkcjonalnie to samo. Standard SQL:2003 mówi:

21) NUMERIC specifies the data type 
    exact numeric, with the decimal 
    precision and scale specified by the 
    <precision> and <scale>. 

22) DECIMAL specifies the data type 
    exact numeric, with the decimal scale 
    specified by the <scale> and the 
    implementation-defined decimal 
    precision equal to or greater than the 
    value of the specified <precision>. 
2

Cytowany prosto z https://www.postgresql.org/message-id/[email protected]

Nie ma żadnej różnicy, w PostgreSQL. Istnieją dwie nazwy typów: , ponieważ standard SQL wymaga od nas zaakceptowania obu nazw. W szybkim wygląd w normie wydaje się, że jedyna różnica jest taka:

 17)NUMERIC specifies the data type exact numeric, with the decimal 
     precision and scale specified by the <precision> and <scale>. 

    18)DECIMAL specifies the data type exact numeric, with the decimal 
     scale specified by the <scale> and the implementation-defined 
     decimal precision equal to or greater than the value of the 
     specified <precision>. 

czyli dla DECIMAL realizacja może pozwolić więcej cyfr niż wymagane na lewo od punktu dziesiętnego. Postgres nie korzysta z tej wolności, więc nie ma różnicy między tymi typami dla nas, .

 regards, tom lane 
Powiązane problemy