Tengo la siguiente columna especificada en una base de datos: decimal (5,2)
¿Cómo se interpreta esto?
De acuerdo con las propiedades de la columna como se ve en el estudio de administración de SQL Server, puedo ver que significa: decimal (precisión numérica, escala numérica).
¿Qué significan la precisión y la escala en términos reales?
Sería fácil interpretar esto como un decimal con 5 dígitos y dos decimales ... es decir, 12345.12
PD: He podido determinar la respuesta correcta de un colega, pero tuve grandes dificultades para encontrar una respuesta en línea. Como tal, me gustaría tener la pregunta y la respuesta documentadas aquí en stackoverflow para referencia futura.
La precisión de un número es el número de dígitos.
La escala de un número es el número de dígitos después del punto decimal.
Lo que generalmente se implica al establecer la precisión y la escala en la definición de campo es que representan valores máximos .
Ejemplo, un campo decimal definido con
precision=5
yscale=2
permitiría los siguientes valores:123.45
(p = 5, s = 2)12.34
(p = 4, s = 2)12345
(p = 5, s = 0)123.4
(p = 4, s = 1)0
(p = 0, s = 0)Los siguientes valores no están permitidos o causarían una pérdida de datos:
12.345
(p = 5, s = 3) => podría truncarse en12.35
(p = 4, s = 2)1234.56
(p = 6, s = 2) => podría truncarse en1234.6
(p = 5, s = 1)123.456
(p = 6, s = 3) => podría truncarse en123.46
(p = 5, s = 2)123450
(p = 6, s = 0) => fuera de rangoTenga en cuenta que el rango generalmente se define por la precisión:
|value| < 10^p
...fuente
12345000
? Precisión 5 u 8? Si es 5, ¿con qué escala? Escala -3?123450 (p=6,s=0)
fuera de rango? 123450 tiene 6 dígitos y ningún dígito después de un punto?123450 (p=6,s=0)
estaría fuera del rango para un campo decimal con 5 precisión (como se menciona en el ejemplo). Debido a que la precisión de un número que desea almacenar en un campo debe ser menor o igual que la precisión del campo.Precisión, escala y longitud en las lecturas de documentación de SQL Server 2000:
fuente