CodeGym /Cursos /SQL SELF /Conversão de tipos de dados com CAST() e :: — exemplos e ...

Conversão de tipos de dados com CAST() e :: — exemplos e dicas

SQL SELF
Nível 5 , Lição 3
Disponível

Imagina que tu quer somar dois números, mas um dos parâmetros tá salvo como string. Ou, por exemplo, tu quer filtrar dados pelo ano, mas a data tá salva no formato completo com hora. O PostgreSQL pode não curtir muito tua ideia, e aí tu vai ter que dar um jeito de converter os dados pro tipo certo.

Converter tipos ajuda a:

  • Facilitar o processamento dos dados pra usar em cálculos.
  • Deixar os dados mais legíveis e organizados pra exportação ou análise.
  • Evitar erros por causa de tipos de dados incompatíveis.

O básico da conversão de tipos: CAST() e ::

1. CAST() — o irmão mais velho de toda conversão

A função CAST() é o jeito "oficial" de converter valores de um tipo de dado pra outro. Ela funciona tipo um tradutor universal.

Sintaxe:

CAST(valor AS tipo_de_dado_destino)

Exemplo 1: Converter string pra número.

SELECT CAST('123' AS INTEGER); -- Resultado: 123

Exemplo 2: Converter número pra string.

SELECT CAST(123 AS TEXT); -- Resultado: '123'

Exemplo 3: Converter data pra string.

SELECT CAST(NOW() AS TEXT); -- Resultado: '2023-10-25 15:00:00.000000'

2. Operador :: — alternativa curtinha

Se CAST() parece meio palavroso pra ti, o PostgreSQL tem o ::. É um jeito abreviado de converter, bem popular porque é rapidinho de escrever.

Sintaxe:

valor::tipo_de_dado_destino

Exemplo 1: Converter string pra número.

SELECT '123'::INTEGER; -- Resultado: 123

Exemplo 2: Converter número pra string.

SELECT 123::TEXT; -- Resultado: '123'

Exemplo 3: Converter data pra string.

SELECT NOW()::TEXT; -- Resultado: '2023-10-25 15:00:00.000000'

Exemplos reais de uso de conversão de tipos

1. Convertendo números e strings

Vamos supor que tu tem uma tabela students, onde a coluna student_id tá salva como string, mas tu quer comparar ela com um valor numérico. Sem converter, não vai rolar.

student_id first_name last_name birth_date grade
101 Alex Lin 2008-03-15 9
102 Maria Chi 2009-07-22 8
103 Axel Ivy 2007-11-30 10
104 Nat Sok 2008-01-18 9
105 Pol Frez 2009-05-05 8

Então, na query tu tem que converter a coluna student_id pra número:

SELECT *
FROM students
WHERE student_id::INTEGER = 101;

Query parecida usando CAST():

SELECT *
FROM students
WHERE CAST(student_id AS INTEGER) = 101;

Convertendo datas

Quando tu precisa pegar só uma parte da data ou transformar ela em string, a conversão de tipos também resolve. Por exemplo, tu tem uma tabela courses com as datas de início dos cursos na coluna start_date.

course_id course_name start_date
1 Introdução ao Python 2025-01-15
2 Fundamentos de SQL 2025-03-01
3 Análise de Dados 2025-05-10
4 Desenvolvimento Web 2025-06-20
5 Machine Learning 2025-09-05

Exemplo: Pegar o ano como número.

SELECT start_date::DATE, start_date::TEXT, start_date::TIMESTAMP
FROM courses;

O resultado vai ser assim:

start_date (DATE) start_date (TEXT) start_date (TIMESTAMP)
2025-01-15 2025-01-15 2025-01-15 00:00:00
2025-03-01 2025-03-01 2025-03-01 00:00:00
2025-05-10 2025-05-10 2025-05-10 00:00:00
2025-06-20 2025-06-20 2025-06-20 00:00:00
2025-09-05 2025-09-05 2025-09-05 00:00:00

Exemplo: Converter data pra "string pura".

SELECT TO_CHAR(start_date, 'DD-MM-YYYY')

O resultado vai ser assim:

to_char
15-01-2025
01-03-2025
10-05-2025
20-06-2025
05-09-2025

Erro: Quando a conversão quebra?

O truque da conversão nem sempre funciona. Às vezes o PostgreSQL deixa bem claro que ele "não entendeu" o que tu queria. Olha esse exemplo clássico: tu tenta converter um texto que parece número, mas tem uns caracteres a mais.

Exemplo de erro:

SELECT '123abc'::INTEGER;
-- ERRO:  sintaxe de entrada inválida para tipo integer: "123abc"

Pra evitar esse tipo de problema, garante antes que os dados realmente podem ser convertidos pro tipo que tu quer. Tu pode usar regex ou outras checagens extras pra isso.

2
Tarefa
SQL SELF, nível 5, lição 3
Bloqueado
Conversão de string para número
Conversão de string para número
2
Tarefa
SQL SELF, nível 5, lição 3
Bloqueado
Conversão de datas e cálculos
Conversão de datas e cálculos
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION