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
Almacenamiento en Microsoft Fabric
Tipos de datos numéricos que tienen precisión y escala fijas. Los tipos 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 utiliza la precisión máxima, los valores válidos se sitúan entre - 10^38 +1 y 10^38 - 1. Los sinónimos ISO para decimal 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 0, por lo que 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.
Convertir datos decimal y numeric
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 a un valor numeric con una precisión de 5 y una escala de 3.
Al convertir de decimal o numeric a float o real se puede provocar una pérdida de precisión. Al convertir de int, smallint, tinyint, float, real, money o smallmoney a decimal o numeric se 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. Y a la inversa, si la opción SET ARITHABORT está establecida en 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 los valores float a decimal o numeric se restringía únicamente a los valores con una precisión de 17 dígitos. Cualquier valor float menor de 5E-18 (cuando se establece mediante la notación científica de 5E-18 o la notación decimal de 0,000000000000000005) se redondea a 0. A partir de SQL Server 2016 (13.x) esto ya no es una restricción.
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 instrucción SELECT.
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;
El conjunto de resultados es el siguiente:
MyDecimalColumn MyNumericColumn
--------------------------------------- ---------------------------------------
123.00 12345.12000
(1 row(s) affected)
Consulte también
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)
Comentarios
Enviar y ver comentarios de