2009-05-01 23 views
213

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

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

¿Cuál es la forma correcta de hacerlo?

Respuesta

421

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

Use algo así como DECIMAL(18,4) en su lugar, ¡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).

+171

Para aclarar DECIMAL (18,4) es de 14 dígitos antes del punto decimal y 4 dígitos después del punto decimal. – Powerlord

+19

Derecha - total de 18 dígitos, 4 de los cuales después del punto decimal - exactamente a la derecha. –

+0

Gracias a Dios ... de acuerdo, tal vez no ... gracias @Jeff Atwood por StackOverflow. rellenando los espacios en blanco de MSDN (aunque MSDN es muy bueno hasta cierto punto) ¡desde su inicio! – Coops

93

Se debe utilizar es la siguiente:

DECIMAL(m,a) 

m es el número de dígitos decimales total de su puede tener.

a es la cantidad máxima 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.

+8

Uhm, 'a' es el número máximo de _digitos después del punto decimal_, no el _max número de puntos decimales_ (de los cuales solo puede tener uno, por supuesto). –

+0

Normalmente se denota como DECIMAL (p, s) donde p significa precisión (los dígitos máximos permitidos en un número) y s representa la escala (dígitos máximos permitidos después del punto decimal). – RBT

2

Las demás respuestas son correctas. Suponiendo que sus ejemplos reflejen el rango completo de posibilidades, lo que quiere es DECIMAL(3, 1). O bien, DECIMAL(14, 1) permitirá un total de 14 dígitos. Es su trabajo pensar en lo que es suficiente.

38

La configuración para Decimal es su precisión y escala o en un 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 pone PI en Decimal(18,0), se registrará como 3?

Si coloca PI en Decimal(18,2), se registrará como 3.14?

Si pone PI en Decimal(18,10) se registrará como 3.1415926535.

6

En MySQL DB decimal(4,2) permite ingresar solo un total de 4 dígitos. Como puede ver en decimal(4,2), significa que puede ingresar un total de 4 dígitos, de los cuales dos dígitos deben guardarse después del punto decimal.

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

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

+0

¿Por qué esto es relevante mientras que la pregunta especificó claramente Microsoft SQL Server? –

25

La mayoría de las veces, uso decimal (9,2) que ocupa el menor espacio de almacenamiento (5 bytes) en el tipo decimal sql.


bytes Precision => Almacenamiento

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

Puede almacenar desde 0 hasta 9 999 999.99 (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.

-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) 
Cuestiones relacionadas