Come archiviare i valori decimali in SQL Server?


273

Sto cercando di capire il tipo di dati decimali di una colonna in SQL Server. Devo essere in grado di memorizzare valori come 15.5, 26.9, 24.7, 9.8, ecc

Ho assegnato decimal(18, 0)al tipo di dati di colonna ma ciò non mi consente di memorizzare questi valori.

Qual è il modo giusto per farlo?

Risposte:


513

DECIMAL(18,0) consentirà 0 cifre dopo il punto decimale.

Usa qualcosa del genere DECIMAL(18,4)invece che dovrebbe andare benissimo!

Questo ti dà un totale di 18 cifre , 4 delle quali dopo il punto decimale (e 14 prima del punto decimale).


@marc_s, Esiste un modo per memorizzare un valore "4.5" in cui il tipo di dati della colonna è decimale (4,2)? Quando inserisco il valore, viene modificato in "4.50"
Arun,

1
@ArunkumarTK: decimal(4,2)consente 2 cifre prima e 2 cifre dopo il punto decimale. "4.5" può essere memorizzato senza problemi - e numericamente, "4.5" e "4.50" sono identici
marc_s

3
@ArunkumarTK: PERCHÉ dovrebbero essere diversi ?? Entrambi sono "quattro e mezzo" - il valore È LO STESSO . E NO non usare a varcharper memorizzare un valore decimale !!
marc_s,

1
So che questa è una vecchia discussione, ma non sarebbe "4.05" e "4.5" in quel caso @ArunkumarTK.
Shelby115,

2
Sì, perché 18 è così popolare (ad esempio il valore predefinito (18,0)) quando sia 18 che 19 usano 9 byte ?
xr280xr,

136

È necessario utilizzare è il seguente:

DECIMAL(m,a)

m è il numero di cifre totali che il decimale può avere.

a è il numero massimo di cifre che è possibile avere dopo il punto decimale.

http://www.tsqltutorials.com/datatypes.php contiene descrizioni per tutti i tipi di dati.


3
Di solito è indicato come DECIMALE (p, s) dove p sta per precisione (cifre massime consentite in un numero) e s sta per scala (cifre massime consentite dopo il punto decimale).
RBT,

Il link è morto
ibrahim mahrir

43

Le impostazioni per Decimalsono la sua precisione e scala o nel linguaggio normale, quante cifre può avere un numero e quante cifre vuoi avere a destra del punto decimale.

Quindi, se lo metti PIin un Decimal(18,0), verrà registrato come 3?

Se lo metti PIin un Decimal(18,2)verrà registrato come 3.14?

Se lo metti PIin Decimal(18,10)essere registrato come 3.1415926535.


35

Per la maggior parte del tempo, utilizzo il decimale (9,2) che occupa il minimo spazio di archiviazione (5 byte) nel tipo decimale sql.


Precisione => Byte di archiviazione

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

Può memorizzare da 0 a 9 999 999,99 (7 ​​cifre prima + 2 cifre dietro il punto decimale = totale 9 cifre), che è abbastanza grande per la maggior parte dei valori.


9

Puoi provare questo

decimal(18,1)

La lunghezza dei numeri dovrebbe essere totalmente 18. La lunghezza dei numeri dopo il punto decimale dovrebbe essere solo 1 e non superiore a quella.


6

In MySQL DB è decimal(4,2)possibile inserire solo un totale di 4 cifre. Come vedi decimal(4,2), significa che puoi inserire un totale di 4 cifre, di cui due sono intese per essere conservate dopo il punto decimale.

Quindi, se inserisci 100.0 nel database MySQL, verrà visualizzato un errore come "Valore fuori intervallo per colonna".

Quindi, puoi inserire solo in questo intervallo: dalle 00.00 alle 99.99.


3
Perché questo è rilevante mentre la domanda specificava chiaramente Microsoft SQL Server?
JCKödel,

3

Le altre risposte sono giuste. Supponendo che i tuoi esempi riflettano l'intera gamma di possibilità ciò che desideri è DECIMAL(3, 1). Oppure, DECIMAL(14, 1)consentirà un totale di 14 cifre. Il tuo compito è pensare a ciò che è abbastanza.


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.