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

ALTER TABLE (Transact-SQL)

CAST y CONVERT (Transact-SQL)

CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)