CodeGym /Cursos /SQL SELF /Tipos de dados numéricos: INTEGER, N...

Tipos de dados numéricos: INTEGER, NUMERIC, FLOAT

SQL SELF
Nível 15 , Lição 1
Disponível

Hoje vamos trocar uma ideia sobre tipos de dados numéricos no PostgreSQL. Se você já ficou na dúvida de como guardar o número "42", fazer contas financeiras ou até guardar milissegundos, tá no lugar certo. Bora entender qual tipo serve pra cada parada, pra você e seus dados ficarem de boa.

Os tipos numéricos no PostgreSQL se dividem em três grupos principais:

  1. Números inteiros (INTEGER): pra guardar números sem parte decimal. Tipo 1, 42, -7, esses clássicos.
  2. Números exatos (NUMERIC): pra guardar números com uma quantidade fixa de casas decimais. Perfeito pra contas de grana, onde precisão é tudo.
  3. Números de ponto flutuante (REAL): pra guardar números que podem ser gigantes ou minúsculos. Eles são menos precisos que NUMERIC, mas ótimos pra cálculos científicos.

Tipo INTEGER

INTEGER é o tipo pra números inteiros. Serve quando você precisa guardar números sem parte decimal. O PostgreSQL tem três variações de INTEGER pra cobrir vários intervalos:

  • SMALLINT: tipo inteiro pequeno. Intervalo: de -32.768 até 32.767.
  • INTEGER (ou INT): tipo inteiro padrão. Intervalo: de -2.147.483.648 até 2.147.483.647.
  • BIGINT: pra números grandões. Intervalo: de -9.223.372.036.854.775.808 até 9.223.372.036.854.775.807.

Imagina que a gente tem uma tabela students onde ficam as infos dos estudantes: nome, idade e quantos créditos (pontos acadêmicos) eles já pegaram:

id name age credits
1 Otto Nate 21 30
2 Maria Chi 22 45
3 Peter Val 20 60
4 Anna Song 23 50
5 Sophie Zhang 21 35

Agora vamos rodar uma query SQL simples pra pegar a lista de estudantes com idade e créditos:

SELECT name, age, credits
FROM students;

Resultado:

name age credits
Otto Nate 21 30
Maria Chi 22 45
Peter Val 20 60
Anna Song 23 50
Sophie Zhang 21 35

Quando usar INTEGER?

  • Guardar identificadores (id, número de pedido).
  • Guardar quantidades de alguma coisa (tipo quantidade de produtos no estoque, número de estudantes).

Tipo NUMERIC

NUMERIC é o tipo pra números exatos com casas decimais fixas. Se você precisa guardar algo tipo 123.456, e errar uma casa decimal pode te dar dor de cabeça (ou prejuízo), vai de NUMERIC.

Formato pra declarar: NUMERIC(precision, scale), onde:

  • precision — total de dígitos (antes e depois da vírgula).
  • scale — quantos dígitos depois da vírgula.

Por exemplo, NUMERIC(6, 2) deixa você guardar números com até 6 dígitos, sendo 2 depois da vírgula.

Vamos criar uma tabela pra registrar transações financeiras:

id description amount
1 Pagamento pelo curso 2345.67
2 Bolsa mensal 500.00
3 Taxa de laboratório 145.99
4 Multa da biblioteca 12.75
5 Inscrição na conferência 320.50

Agora vamos mostrar a lista de transações:

SELECT description, amount
FROM transactions;

Resultado:

description amount
Pagamento pelo curso 2345.67
Bolsa mensal 500.00
Taxa de laboratório 145.99
Multa da biblioteca 12.75
Inscrição na conferência 320.50

Quando usar NUMERIC?

  • Contas financeiras (preço de produtos, salários).
  • Guardar medições exatas (peso, comprimento).

Tabela measurements

id mass - REAL height - REAL
1 70.5 1.83
2 64.2 1.75
3 82.3 1.92
4 55.0 1.60

Agora vamos mostrar os valores:

SELECT mass, height
FROM measurements;

Resultado:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

Quando usar REAL?

  • Cálculos científicos (massa de átomos, distância até a Lua).
  • Modelagem de dados onde um errinho é de boa.

Comparando tipos numéricos: quando usar cada um?

Tipo de dado Intervalo Precisão Exemplos de uso
SMALLINT -32.768 até 32.767 Números inteiros Números pequenos (idade, avaliações).
INTEGER -2.147.483.648 até 2.147.483.647 Números inteiros Identificadores, quantidades.
BIGINT -9.223.372.036.854.775.808 até 9.223.372.036.854.775.807 Números inteiros Números muito grandes.
NUMERIC Depende do precision e scale Números decimais exatos Finanças, medições.
REAL Aproximadamente 6 casas decimais Ponto flutuante Dados aproximados ou científicos.
DOUBLE PRECISION Aproximadamente 15 casas decimais Ponto flutuante de alta precisão Ciência, pesquisa.

Apelidos

No PostgreSQL, vários tipos numéricos têm apelidos (sinônimos) — são nomes alternativos pros tipos, que funcionam igualzinho, mas deixam o código mais legível ou compatível com outros bancos.

Aqui vai um guia rápido e direto sobre apelidos de tipos numéricos no PostgreSQL:

Apelidos para tipos inteiros

Apelido Tipo real Tamanho Intervalo
INT INTEGER 4 bytes −2.147.483.648 até 2.147.483.647
INT4 INTEGER 4 bytes (apelido antigo)
SMALLINT SMALLINT 2 bytes −32.768 até 32.767
INT2 SMALLINT 2 bytes
BIGINT BIGINT 8 bytes −9 quintilhões até +9 quintilhões
INT8 BIGINT 8 bytes

Apelidos para números exatos

Apelido Tipo real Uso
DEC NUMERIC Sinônimo do padrão SQL
DECIMAL NUMERIC Mesma coisa

Apelidos para números de ponto flutuante

Apelido Tipo real Precisão
FLOAT DOUBLE PRECISION ~15 dígitos (padrão)
FLOAT(24) REAL ~6 dígitos
FLOAT(53) DOUBLE PRECISION ~15 dígitos
FLOAT8 DOUBLE PRECISION Apelido antigo
FLOAT4 REAL Apelido antigo

Erros comuns

Quando você mexe com tipos numéricos, pode cair em algumas ciladas:

Escolher um tipo de dado pequeno demais. Se você usar SMALLINT pra idade de pessoas, tá vacilando. O robô da "Matrix" com milhões de anos vai ficar chateado.

Perda de dados por arredondamento. Se usar REAL pra contas de dinheiro, pode perder uns centavos. E depois a confiança da galera.

Comparar tipos diferentes. Se comparar INTEGER com REAL, pode ter resultados estranhos por causa de como números de ponto flutuante funcionam.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION