Compartir a través de


decimal y numeric (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Warehouse en Microsoft Fabric Base de datos SQL de Microsoft Fabric

decimales y numéricos son tipos de datos numéricos que tienen una precisión y escala fijas. decimal y numeric son sinónimos y se pueden usar indistintamente.

Argumentos

decimal [ ( p [ , s ] ) ] y numeric [ ( p [ , s ] ) ]

Números de precisión y escala fijas. Cuando se usa la precisión máxima, los valores válidos son de a través 10^38 - 1de -10^38 + 1 . Los sinónimos ISO para decimales son dec y dec(p,s). numeric es funcionalmente idéntico a decimal.

p (precisión)

El número total máximo de dígitos decimales que se almacenarán. Este número incluye los lados derecho e izquierdo 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.

Nota

Informatica solo admite 16 dígitos significativos, sin tener en cuenta la precisión y la escala especificada.

s (escala)

El número de dígitos decimales que se almacenarán 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, y solo se puede especificar si se especifica la precisión. La escala predeterminada es 0y, por tanto 0 <= s <= p, . Los tamaños de almacenamiento máximo varían según la precisión.

Precision Bytes de almacenamiento
1 - 9 5
10-19 9
20-28 13
29-38 17

Nota

Informatica (conectado a través del conector PDW de SQL Server de Informatica) solo admite 16 dígitos significativos, sin tener en cuenta la precisión y la escala especificada.

Conversión de datos decimales y numéricos

En el caso de los tipos de datos decimal y numeric, SQL Server considera cada combinación 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 en un valor numérico , con una precisión de 5y una escala de 3.

Conversión de Conversión a Riesgo de conversión
decimal y numeric float o real Posible pérdida de precisión
int, smallint, tinyint, float, real, money o smallmoney decimal y numeric Posible 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. Por el contrario, si la SET ARITHABORT opción es ON, SQL Server genera un error cuando se produce un desbordamiento. La pérdida de únicamente precisión y escala no es suficiente para generar un error.

Antes de SQL Server 2016 (13.x), la conversión de valores float a decimal o numeric solo está restringida a valores de precisión de 17 dígitos. Cualquier valor float menor que 5E-18 (cuando se establece mediante la notación científica de 5E-18 o la notación decimal de 0.000000000000000005) redondea hacia abajo a 0. Esta restricción no aparece en SQL Server 2016 (13.x) ni en versiones posteriores.

Ejemplos

En este ejemplo se crea una tabla con los tipos de datos decimal y numeric. Los valores se insertan en cada columna. Los resultados se devuelven mediante una SELECT instrucción .

CREATE TABLE dbo.MyTable (
    MyDecimalColumn DECIMAL(5, 2),
    MyNumericColumn NUMERIC(10, 5)
);
GO

INSERT INTO dbo.MyTable
VALUES (123, 12345.12);
GO

SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;

Este es el conjunto de resultados.

MyDecimalColumn  MyNumericColumn
---------------- ----------------
123.00           12345.12000