decimal y numeric (Transact-SQL)
Tipos de datos numéricos que tienen precisión y escala fijas.
decimal [ **(**p[ **,**s] )] y numeric[ **(**p[ **,**s] )]
Números de precisión y escala fijas. Cuando se utiliza la precisión máxima, los valores válidos se sitúan entre - 10^38 +1 y 10^38 - 1. Los sinónimos de ISO para decimal son dec y dec(p, s). numeric es funcionalmente equivalente a decimal.p (precisión)
El número total máximo de dígitos decimales que almacenará, tanto a la izquierda como a la derecha del separador decimal. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.s (escala)
El número de dígitos decimales que se almacenará a la derecha del separador decimal. Este número se extrae de p para determinar el número máximo de dígitos a la izquierda del separador decimal. La escala debe ser un valor comprendido entre 0 y p. Solo es posible especificar la escala si se ha especificado la precisión. La escala predeterminada es 0; por lo tanto, 0 <= s <= p. Los tamaños de almacenamiento máximo varían según la precisión.Precisión
Bytes de almacenamiento
1 - 9
5
10-19
9
20-28
13
29-38
17
Convertir datos decimal y numeric
En el caso de los tipos de datos decimal y numeric, SQL Server considera cada combinación específica de precisión y escala como un tipo de datos distinto. Por ejemplo, decimal(5,5) y decimal(5,0) se consideran tipos de datos diferentes.
En las instrucciones Transact-SQL, una constante con un separador decimal se convierte automáticamente a un valor de datos numeric, con la precisión y escala mínimas necesarias. Por ejemplo, la constante 12.345 se convierte a un valor numeric con una precisión de 5 y una escala de 3.
La conversión de valores decimal o numeric a valores float o real puede provocar alguna pérdida de precisión. La conversión de valores int, smallint, tinyint, float, real, money o smallmoney a valores decimal o numeric puede provocar un desbordamiento.
De forma predeterminada, SQL Server usa el redondeo cuando convierte un número a un valor decimal o numeric con una precisión y una escala inferiores. Sin embargo, si la opción SET ARITHABORT está establecida en ON, SQL Server genera un error cuando se produce un desbordamiento. La pérdida de precisión y escala no es suficiente para generar un error.
Cuando se conviertan valores float o reales a valores decimales o numéricos, el valor decimal nunca tendrá más de 17 decimales. Los valores float < 5E-18 se convertirán siempre en 0.
Vea también
Referencia
DECLARE @local\_variable (Transact-SQL)