Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia administrada de Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Punto de conexión de SQL Analytics en Microsoft Fabric
Almacén en Microsoft Fabric
Base de datos SQL en 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.
Arguments
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.
Note
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 |
Note
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 desde | 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.
Examples
A. Creación de una tabla con tipos de datos decimales y numéricos
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
B. Conversión de float a decimal con una precisión y escala inferiores
En el ejemplo siguiente se muestra cómo se redondea un valor float cuando se convierte en un decimal con una precisión y una escala inferiores.
CREATE TABLE dbo.MyTable (
MyFloatColumn FLOAT,
MyDecimalColumn DECIMAL(10, 3)
);
GO
DECLARE @value FLOAT;
SELECT @value = 12345.123456789;
INSERT INTO dbo.MyTable
VALUES (@value, @value);
GO
SELECT MyFloatColumn, MyDecimalColumn
FROM dbo.MyTable;