¿Cómo almacenar valores decimales en SQL Server?

273

Estoy tratando de averiguar el tipo de datos decimales de una columna en SQL Server. Necesito poder almacenar valores como 15.5, 26.9, 24.7, 9.8, etc.

Le asigné decimal(18, 0)el tipo de datos de columna, pero esto no me permite almacenar estos valores.

¿Cuál es la forma correcta de hacer esto?

Alex
fuente

Respuestas:

513

DECIMAL(18,0) permitirá 0 dígitos después del punto decimal.

¡Usa algo como DECIMAL(18,4)eso que debería funcionar bien!

Eso le da un total de 18 dígitos , 4 de los cuales después del punto decimal (y 14 antes del punto decimal).

marc_s
fuente
@marc_s, ¿hay alguna forma de almacenar un valor "4.5" donde el tipo de datos de la columna sea decimal (4,2)? Cuando inserto el valor, se está modificando a "4.50"
Arun
1
@ArunkumarTK: decimal(4,2)permite 2 dígitos antes y 2 dígitos después del punto decimal. "4.5" se puede almacenar sin problemas - y numéricamente, "4.5" y "4.50" son idénticos
marc_s
3
@ArunkumarTK: ¿POR QUÉ deberían ser diferentes? Ambos son "cuatro y medio": el valor ES EL MISMO . ¡Y NO , no use a varcharpara almacenar un valor decimal!
marc_s
1
Sé que esta es una discusión antigua, pero no sería '4.05' y '4.5' en ese caso @ArunkumarTK.
Shelby115
2
Sí, ¿por qué 18 es tan popular (por ejemplo, el valor predeterminado (18,0)) cuando 18 y 19 usan 9 bytes ?
xr280xr
136

Debe usar es el siguiente:

DECIMAL(m,a)

m es el número de dígitos totales que puede tener su decimal.

a es el número máximo de dígitos que puede tener después del punto decimal.

http://www.tsqltutorials.com/datatypes.php tiene descripciones para todos los tipos de datos.

DForck42
fuente
3
Por lo general, se denota como DECIMAL (p, s) donde p representa precisión (dígitos máximos permitidos en un número) y s representa escala (dígitos máximos permitidos después del punto decimal).
RBT
El enlace está muerto
ibrahim mahrir
43

Las configuraciones para Decimalson su precisión y escala o en lenguaje normal, cuántos dígitos puede tener un número y cuántos dígitos desea tener a la derecha del punto decimal.

Entonces, si pones PIen un Decimal(18,0)se registrará como 3?

Si pones PIen un Decimal(18,2)se registrará como 3.14?

Si pones PIen Decimal(18,10)ser grabado como 3.1415926535.

Rubens Mariuzzo
fuente
35

Para la mayoría de las veces, uso decimal (9,2), que ocupa menos espacio (5 bytes) en el tipo decimal sql.


Precisión => bytes de almacenamiento

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

Puede almacenar de 0 a 999999999 (7 ​​dígitos delante + 2 dígitos detrás del punto decimal = total 9 dígitos), que es lo suficientemente grande para la mayoría de los valores.

Hnin Htet Htet Aung
fuente
9

Puedes probar esto

decimal(18,1)

La longitud de los números debe ser totalmente 18. La longitud de los números después del punto decimal debe ser solo 1 y no más que eso.

Biddut
fuente
6

En MySQL DB decimal(4,2)permite ingresar solo un total de 4 dígitos. Como puede ver decimal(4,2), significa que puede ingresar un total de 4 dígitos, de los cuales dos dígitos están destinados a mantenerse después del punto decimal.

Por lo tanto, si ingresa 100.0 en la base de datos MySQL, mostrará un error como "Valor fuera de rango para columna".

Por lo tanto, solo puede ingresar en este rango: de 00.00 a 99.99.

Raja Done
fuente
3
¿Por qué esto es relevante mientras la pregunta especifica claramente Microsoft SQL Server?
JCKödel
3

Las otras respuestas son correctas. Asumiendo que sus ejemplos reflejan la gama completa de posibilidades, lo que quiere es DECIMAL(3, 1). O, DECIMAL(14, 1)permitirá un total de 14 dígitos. Es tu trabajo pensar en lo que es suficiente.

Matthew Flaschen
fuente
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
fuente