2015-11-16 30 views
8

a cosa serve il tipo di dati decimal e numeric in postgreSQL. Come da riferimento, la seguente è la spiegazione fornita a questi tipi di dati.Differenza tra il tipo di dati DECIMAL e NUMERICO in 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. 

La dichiarazione di cui sopra mostra la descrizione di decimal e numeric tipo di dati. Ma, ancora non ho capito quale sia l'uso esatto di questo tipo di dati nello e dove viene usato al posto di altri tipi di dati.

risposta con esempio è molto apprezzato ...

+0

postale Croce: http://dba.stackexchange.com/q/121196/1822 –

risposta

13

Right from the manual:

I tipi decimal e numeric sono equivalenti. Entrambi i tipi fanno parte dello standard SQL.

quanto riguarda il "perché devo usarlo", anche questo è spiegato nel manuale:

Il tipo numerico può memorizzare i numeri con un numero molto elevato di cifre e eseguono calcoli esattamente

(Enfasi mia).

Se avete bisogno di numeri con i decimali, utilizzare decimal (o numeric) se avete bisogno di numeri senza decimali, utilizzare integer o bigint. Un tipico utilizzo di decimal come tipo di colonna sarebbe una colonna "prezzo del prodotto" o un "tasso di interesse". Un tipico utilizzo di un tipo intero potrebbe essere ad es. una colonna che memorizza il modo in cui sono stati ordinati molti prodotti (supponendo che non sia possibile ordinare "metà" di un prodotto).

double e real sono anche tipi che possono memorizzare valori decimali, ma sono approssimativi tipi. Ciò significa che non è necessario recuperare il valore memorizzato. Per dettagli vedi: http://floating-point-gui.de/

1

Sono sinonimo l'uno dell'altro e funzionalmente uguale. Lo standard SQL:2003 dice:

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

Citato retta dalla https://www.postgresql.org/message-id/[email protected]

Non c'è alcuna differenza, in Postgres. Esistono due nomi di tipo perché lo standard SQL richiede l'accettazione di entrambi i nomi. In un rapida occhiata nello standard sembra che l'unica differenza è questa:

 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>. 

cioè per decimale è consentito l'implementazione per consentire più cifre quelli richiesti alla sinistra del punto decimale. Postgres non ha il diritto di esercitare questa libertà, quindi non c'è differenza tra questi tipi per noi.

 regards, tom lane