decimal e numeric (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
PDW (Analytics Platform System)
Tipos de dados numéricos que têm precisão e escala fixos. Decimal e numeric são sinônimos e podem ser usados intercambiavelmente.
Argumentos
decimal[ (p[ ,s] ) ] e numeric[ (p[ ,s] ) ]
Números de precisão e escala fixos. Quando a precisão máxima for usada, os valores válidos serão de - 10^38 +1 a 10^38 - 1. Os sinônimos ISO para decimal são dez e dec(p, s) . numeric é funcionalmente equivalente a decimal.
p (precisão)
O número total máximo de dígitos decimais a ser armazenados. Esse número inclui o que está à direita e à esquerda do ponto decimal. A precisão deve ser um valor de 1 até a precisão máxima de 38. A precisão padrão é 18.
Observação
Informatica é compatível apenas com 16 dígitos significativos, independentemente da precisão e da escala especificadas.
s (escala)
O número máximo de dígitos decimais que são armazenados à direita do ponto decimal. Esse número é subtraído de p para determinar o número máximo de dígitos à esquerda do separador decimal. A escala deve ser um valor de 0 a p, e só poderá ser especificada se a precisão for definida. A escala padrão é 0; portanto, 0 <= s<= p. Os tamanhos máximos de armazenamento variam, com base na precisão.
Precisão | Bytes de armazenamento |
---|---|
1 - 9 | 5 |
10–19 | 9 |
20–28 | 13 |
29-38 | 17 |
Observação
Informatica (conectado por meio do conector do SQL Server PDW Informatica) é compatível apenas com 16 dígitos significativos, independentemente da precisão e da escala especificadas.
Convertendo dados decimais e numéricos
Para os tipos de dados decimal e numeric, o SQL Server considera cada combinação de precisão e escala como um tipo de dados diferente. Por exemplo, decimal(5,5) e decimal(5,0) são considerados tipos de dados diferentes.
Nas instruções do Transact-SQL, uma constante com um ponto decimal é convertida automaticamente em um valor de dados numeric, usando a escala e a precisão mínimas necessárias. Por exemplo, a constante 12,345 é convertida em um valor numeric com uma precisão 5 e uma escala 3.
Converter de decimal ou numeric para float ou real pode causar perda de precisão. Converter de int, smallint, tinyint, float, real, money ou smallmoney para decimal ou numeric pode causar estouro.
Por padrão, o SQL Server usa arredondamento ao converter um número em um valor decimal ou numeric com precisão e escala inferiores. Por outro lado, se a opção SET ARITHABORT for ON, o SQL Server gerará um erro quando acontecer o estouro. Apenas a perda de precisão e escala não é suficiente para gerar um erro.
Antes do SQL Server 2016 (13.x), a conversão de valores float para decimal ou numeric era restrita somente a valores com precisão de 17 dígitos. Qualquer valor float menor que 5E-18 (quando definido usando a notação científica de 5E-18 ou a notação decimal de 0,000000000000000005) é arredondado para 0. Essa não é mais uma restrição no SQL Server 2016 (13.x) em diante.
Exemplos
O exemplo a seguir cria uma tabela usando os tipos de dados decimal e numérico. Os valores são inseridos em cada coluna. Os resultados são retornados usando uma instrução 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;
Este é o conjunto de resultados.
MyDecimalColumn MyNumericColumn
--------------------------------------- ---------------------------------------
123.00 12345.12000
(1 row(s) affected)
Confira também
ALTER TABLE (Transact-SQL)
CAST e CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.types (Transact-SQL)