Compartilhar via


decimal e numeric (Transact-SQL)

Tipos de dados numéricos que têm precisão e escala fixos.

Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual).

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 de ISO para decimal são dec e dec(p, s). numeric é funcionalmente equivalente a decimal.

  • p (precisão)
    O número máximo total de dígitos decimais que poderão ser armazenados, à esquerda e à direita 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.

  • s (escala)
    O número máximo de dígitos decimais que poderão ser armazenados à direita do ponto decimal. Esse número é subtraído de p para determinar o número máximo de dígitos à esquerda da casa decimal. O número máximo de dígitos decimais que podem ser armazenados à direita do ponto decimal. A escala deve ser um valor de 0 a p. A escala somente poderá ser especificada se precisão também o for. 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

Convertendo dados decimal e numeric

Para os tipos de dados decimal e numeric, o SQL Server considera cada combinação específica 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.

A conversão de decimal ou numeric em float ou real pode causar uma perda de precisão. A conversão de int, smallint, tinyint, float, real, money ou smallmoney em decimal ou numeric pode provocar 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ém, se a opção SET ARITHABORT for ON, o SQL Server irá gerar um erro quando acontecer o estouro. Apenas a perda de precisão e escala não é suficiente para gerar um erro.

Ao converter valores reais ou flutuantes em valores decimais ou numéricos, o valor decimal nunca terá mais de 17 decimais. Qualquer valor flutuante < 5E-18 será sempre convertido em 0.

Exemplos

O exemplo a seguir cria uma tabela usando os tipos de dados decimal e numeric. Os valores são inseridos em cada coluna e 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;

Aqui está o conjunto de resultados.

MyDecimalColumn                         MyNumericColumn
--------------------------------------- ---------------------------------------
123.00                                  12345.12000

(1 row(s) affected)

Consulte também

Referência

ALTER TABLE (Transact-SQL)

CAST e CONVERT (Transact-SQL)

CREATE TABLE (SQL Server)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)