Share via


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