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

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)