¿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?

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


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.


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.


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.


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.


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.


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.