Como armazenar valores decimais no SQL Server?

272

Estou tentando descobrir o tipo de dados decimal de uma coluna no SQL Server. Eu preciso ser capaz de armazenar valores como 15,5, 26,9, 24,7, 9,8, etc.

Eu atribui decimal(18, 0)ao tipo de dados da coluna, mas isso não me permite armazenar esses valores.

Qual é a maneira certa de fazer isso?

Alex
fonte

Respostas:

513

DECIMAL(18,0) permitirá 0 dígitos após o ponto decimal.

Use algo do tipo DECIMAL(18,4)que deve funcionar bem!

Isso fornece um total de 18 dígitos , 4 dos quais após o ponto decimal (e 14 antes do ponto decimal).

marc_s
fonte
@marc_s, existe uma maneira de armazenar um valor "4.5" onde o tipo de dados da coluna é decimal (4,2)? Quando insiro o valor, ele está sendo modificado para "4.50"
Arun
1
@ArunkumarTK: decimal(4,2)permite 2 dígitos antes e 2 dígitos após o ponto decimal. "4.5" pode ser armazenado nenhum problema - e numericamente, "4.5" e "4,50" são idênticos
marc_s
3
@ArunkumarTK: POR QUE esses deveriam ser diferentes? Ambos são "quatro e meio" - o valor É O MESMO . E NÃO , não use a varcharpara armazenar um valor decimal !!
21415 Marc
1
Eu sei que essa é uma discussão antiga, mas não seria '4,05' e '4,5' nesse caso @ArunkumarTK.
Shelby115
2
Sim, por que 18 é tão popular (por exemplo, o padrão (18,0)) quando 18 e 19 usam 9 bytes ?
Xr280xr # 13/17
136

Você deve usar é o seguinte:

DECIMAL(m,a)

m é o número total de dígitos que seu decimal pode ter.

a é o número máximo de dígitos que você pode ter após o ponto decimal.

http://www.tsqltutorials.com/datatypes.php possui descrições para todos os tipos de dados.

DForck42
fonte
3
Geralmente é indicado como DECIMAL (p, s), em que p significa precisão (número máximo permitido em um número) es é escala (número máximo permitido após o ponto decimal).
RBT
O link está morto
ibrahim mahrir 30/01
43

As configurações Decimalsão de precisão e escala ou no idioma normal, quantos dígitos um número pode ter e quantos você deseja ter à direita do ponto decimal.

Então, se você colocar PIem um, Decimal(18,0)ele será gravado como 3?

Se você colocar PIem um Decimal(18,2)será gravado como 3.14?

Se você colocar PIem Decimal(18,10)ser gravado como 3.1415926535.

Rubens Mariuzzo
fonte
35

Na maior parte do tempo, uso decimal (9,2), que ocupa o mínimo de armazenamento (5 bytes) no tipo decimal sql.


Precisão => Bytes de armazenamento

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

Ele pode armazenar de 0 a 9.999.999,99 (7 ​​dígitos na frente + 2 dígitos atrás do ponto decimal = total de 9 dígitos), que é grande o suficiente para a maioria dos valores.

Hnin Htet Htet Aung
fonte
9

Você pode tentar isso

decimal(18,1)

O comprimento dos números deve ser totalmente 18. O comprimento dos números após o ponto decimal deve ser apenas 1 e não mais que isso.

Biddut
fonte
6

No MySQL DB decimal(4,2)permite inserir apenas um total de 4 dígitos. Como você vê decimal(4,2), significa que você pode inserir um total de 4 dígitos, dos quais dois dígitos devem ser mantidos após o ponto decimal.

Portanto, se você digitar 100.0 no banco de dados MySQL, será exibido um erro como "Valor fora do intervalo da coluna".

Portanto, você pode inserir apenas esse intervalo: de 00,00 a 99,99.

Raja Done
fonte
2
Por que isso é relevante enquanto a pergunta especifica claramente o Microsoft SQL Server?
JCKödel 19/0118
3

As outras respostas estão certas. Supondo que seus exemplos reflitam toda a gama de possibilidades, o que você deseja é DECIMAL(3, 1). Ou, DECIMAL(14, 1)permitirá um total de 14 dígitos. É seu trabalho pensar no que é suficiente.

Matthew Flaschen
fonte
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)
freya
fonte