Tipos numéricos - Amazon Redshift

Tipos numéricos

Os tipos de dados numéricos incluem números inteiros, decimais e números de ponto flutuante.

Tipos de inteiros

Use tipos de dados SMALLINT, INTEGER e BIGINT para armazenar números inteiros de vários intervalos. Você não pode armazenar valores fora do intervalo permitido para cada tipo.

Nome Armazenamento Intervalo
SMALLINT ou INT2 2 bytes -32768 a +32767
INTEGER, INT, ou INT4 4 bytes -2147483648 a +2147483647
BIGINT ou INT8 8 bytes -9223372036854775808 a 9223372036854775807

Tipo DECIMAL ou NUMERIC

Use o tipo de dados DECIMAL ou NUMERIC para armazenar valores com uma precisão definida pelo usuário. As palavras-chave DECIMAL e NUMERIC são intercambiáveis. Neste documento, decimal é o termo preferido para esse tipo de dados. O termo numeric é usado genericamente para se referir aos tipos de dados de número inteiro, decimal e de ponto flutuante.

Armazenamento Intervalo
Variável, até 128 bits para tipos DECIMAL não compactados. Números inteiros assinados de 128 bits com até 38 dígitos de precisão.

Define uma coluna DECIMAL em uma tabela especificando uma precisão e escala:

decimal(precision, scale)
precisão

O número total de dígitos significativos no valor inteiro: o número de dígitos em ambos os lados do ponto decimal. Por exemplo, o número 48.2891 tem precisão de 6 e uma escala de 4. A precisão padrão, quando não especificada, é 18. A precisão máxima é 38.

Se o número de dígitos à esquerda do ponto decimal em um valor de entrada excede a precisão de coluna menos a sua escala, o valor não pode ser copiado para a coluna (ou inserido ou atualizado). Esta regra aplica-se a qualquer valor que caia fora do intervalo de definição da coluna. Por exemplo, o intervalo permitido de valores para uma coluna numeric(5,2) é -999.99 a 999.99.

escala

O número de dígitos decimais na parte fracionada do valor, à direita do ponto decimal. Números inteiros têm uma escala de zero. Em uma especificação de coluna, o valor de escala deve ser menor ou igual ao valor de precisão. A escala padrão, quando não especificada, é 0. A escala máxima é 37.

Se a escala de um valor de entrada carregado em uma tabela for maior do que a escala da coluna, o valor será arredondado para a escala especificada. Por exemplo, a coluna PRICEPAID na tabela SALES é uma coluna DECIMAL(8,2). Se um valor DECIMAL(8,4) é inserido na coluna PRICEPAID, o valor é arredondado para uma escala de 2.

insert into sales values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null); select pricepaid, salesid from sales where salesid=0; pricepaid | salesid -----------+--------- 4323.90 | 0 (1 row)

Contudo, os resultados de conversões explícitas dos valores selecionados a partir de tabelas não são arredondados.

nota

O valor positivo máximo que você pode inserir na coluna DECIMAL(19,0) é 9223372036854775807 (263 -1). O valor negativo máximo é -9223372036854775807. Por exemplo, uma tentativa de inserir o valor 9999999999999999999 (19 noves) causará um erro de transbordamento. Independentemente do posicionamento do ponto decimal, a maior string que o Amazon Redshift pode representar como um número DECIMAL é 9223372036854775807. Por exemplo, o maior valor que você pode carregar em uma coluna DECIMAL(19,18) é 9.223372036854775807.

Essas regras ocorrem porque valores DECIMAL com 19 ou menos dígitos significativos de precisão são armazenados internamente como valores inteiros de 8 bytes, enquanto valores DECIMAL com 20 a 38 dígitos significativos de precisão são armazenados como valores inteiros de 16 bytes.

Observações sobre o uso de colunas do tipo DECIMAL ou NUMERIC de 128 bits

Não designe arbitrariamente a precisão máxima às colunas do tipo DECIMAL, a não ser que você esteja certo de que sua aplicação requer essa precisão. Valores de 128 bits usam duas vezes mais espaço em disco do que valores de 64 bits e podem retardar o tempo de execução da consulta.

Tipos de ponto flutuante

Use os tipos de dados REAL e DOUBLE PRECISION para armazenar valores numéricos com precisão variável. Esses tipos são inexatos, o que significa que alguns valores são armazenados como aproximações, de tal forma que o armazenamento e retorno de um valor específico pode resultar em ligeiras discrepâncias. Se você precisar de armazenamento e cálculos precisos (como para quantidades monetárias), use o tipo de dados DECIMAL.

REAL representa o formato de ponto flutuante de precisão única, de acordo com o padrão 754 do IEEE para aritmética de ponto flutuante binário. Tem uma precisão de cerca de 6 dígitos e um intervalo de cerca de 1E-37 a 1E+37. Você também pode especificar esse tipo de dado como FLOAT4.

DOUBLE PRECISION representa o formato de ponto flutuante de precisão dupla, de acordo com o padrão 754 do IEEE para aritmética de ponto flutuante binário. Tem uma precisão de cerca de 15 dígitos e um intervalo de cerca de 1E-307 a 1E+308. Você também pode especificar esse tipo de dado como FLOAT ou FLOAT8.

Além dos valores numéricos comuns, os tipos de ponto flutuante têm diversos valores especiais. Use aspas simples em torno desses valores ao usá-los em SQL:

  • NaN: not-a-number

  • Infinity: infinity

  • -Infinity: negative infinity

Por exemplo, para inserir not-a-number na coluna day_charge da tabela customer_activity, execute o seguinte SQL:

insert into customer_activity(day_charge) values('NaN');