decimal e numeric (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse 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.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários