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)
Ponto de extremidade de SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
Decimal e numérico são tipos de dados numéricos que têm uma precisão e escala fixas. decimal e numérico são sinônimos e podem ser usados alternadamente.
Argumentos
decimal [ ( p [ , s ] ] e numérico [ ( p[ , s ] ] ]
Números de precisão e escala fixos. Quando a precisão máxima é usada, os valores válidos são de -10^38 + 1
até 10^38 - 1
. Os sinônimos ISO para decimal são dec 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
, e assim 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.
Converter 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 numérico , com uma precisão de 5
, e uma escala de 3
.
Conversão de | Conversão para | Risco de conversão |
---|---|---|
decimal e numeric | flutuador ou real | Possível perda de precisão |
int, smallint, tinyint, float, real, dinheiro ou smallmoney | decimal e numeric | Possível transbordamento |
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 SET ARITHABORT
opção for ON
, o SQL Server gerará um erro quando ocorrer 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 flutuantes em decimais ou numéricos era restrita apenas a valores de precisão de 17 dígitos. Qualquer valor de flutuação menor que 5E-18
(quando definido usando a notação científica de 5E-18
ou a notação decimal de 0.000000000000000005
) arredonda para baixo para 0
. Essa restrição não aparece no SQL Server 2016 (13.x) e versões posteriores.
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 SELECT
instrução.
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
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de