Compartilhar via


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 análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric

Decimal e numérico são tipos de dados numéricos que têm precisão e escala fixas. decimal e numérico são sinônimos e podem ser usados de forma intercambiável.

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, money ou smallmoney decimal e numeric Possível 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 for ON, o SET ARITHABORT 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 é restrita apenas a valores de precisão de 17 dígitos. Qualquer valor flutuante menor que 5E-18 (quando definido usando a notação científica de ou a notação decimal de ) é arredondado 5E-18 0.000000000000000005para 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