Trabalhar com dados de texto é o pão de cada dia pra quem mexe com banco de dados. Imagina que tu é dev de uma loja online e tem um banco de usuários. Precisa mostrar os nomes completos dos usuários num banner de boas-vindas no site, tipo: "Bem-vindo, Otto Art!". Ou então precisa padronizar todos os emails (por exemplo, deixar tudo minúsculo). Nessas horas, não tem como fugir das operações com string.
O PostgreSQL tem ferramentas bem poderosas pra lidar com texto. Hoje a gente vai ver três das principais:
CONCAT()— junta strings.UPPER()— transforma a string pra maiúsculo.LOWER()— transforma a string pra minúsculo.
Trabalhando com a função CONCAT()
A função CONCAT() serve pra juntar várias strings numa só. É perfeita quando os dados estão em colunas diferentes, mas tu precisa mostrar tudo junto.
Sintaxe
CONCAT(string1, string2, ..., stringN)
string1,string2,stringN— as strings ou colunas que tu quer juntar.- Retorna uma string só, com todos os argumentos colados.
Exemplo: trabalhando com nomes
Vamos supor que temos a tabela students:
| first_name | last_name |
|---|---|
| Otto | Art |
| Maria | Chi |
| Anna | Pal |
Nosso objetivo: mostrar os nomes completos dos estudantes no formato "Nome Sobrenome".
Query:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
Resultado:
| full_name |
|---|
| Otto Art |
| Maria Chi |
| Anna Pal |
Repara no ' ' entre o nome e o sobrenome. É o espaço que a gente colocou pra separar as strings.
Dicas de uso
CONCAT() ignora NULL. Se um dos argumentos for NULL, ele só pula. Se tu ainda não sabe o que é NULL, relaxa — a gente explica isso já já.
Alternativa ao CONCAT() é o operador ||, tipo assim:
SELECT first_name || ' ' || last_name AS full_name FROM students;
Mudando o case das strings: UPPER() e LOWER()
Pensa que tu tá lidando com emails que os usuários digitaram de tudo quanto é jeito: ivan@example.com, IVAN@EXAMPLE.COM. Pra padronizar, geralmente a gente precisa:
- deixar tudo igual antes de comparar (tipo,
lowercase). - destacar palavras importantes (tipo,
UPPERCASEpra títulos).
UPPER(): texto em maiúsculo
A função UPPER() transforma o texto pra tudo maiúsculo.
Sintaxe:
UPPER(string)
string— a string ou o nome da coluna de texto.
Exemplo:
Na tabela students agora tem a coluna email:
| first_name | last_name | |
|---|---|---|
| Otto | Art | otto@example.com |
| Maria | Chi | MARIA@EXAMPLE.com |
| Anna | Pal | anna.pal@mail.ru |
Queremos mostrar os emails em maiúsculo:
SELECT email, UPPER(email) AS email_upper
FROM students;
Resultado:
| email_upper | |
|---|---|
| otto@example.com | OTTO@EXAMPLE.COM |
| MARIA@EXAMPLE.com | MARIA@EXAMPLE.COM |
| anna.pal@gmail.com | ANNA.PAL@GMAIL.COM |
LOWER(): texto em minúsculo
Do mesmo jeito, a função LOWER() transforma o texto pra minúsculo.
Sintaxe:
LOWER(string)
Exemplo:
Vamos deixar os emails todos em minúsculo:
SELECT email, LOWER(email) AS email_lower
FROM students;
Resultado:
| email_lower | |
|---|---|
| otto@example.com | otto@example.com |
| MARIA@EXAMPLE.com | maria@example.com |
| anna.pal@gmail.com | anna.pal@gmail.com |
Exemplos práticos e casos de uso
Bora juntar tudo que a gente viu até agora.
Criando nome completo em maiúsculo
Query:
SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;
Resultado:
| full_name_upper |
|---|
| OTTO ART |
| MARIA CHI |
| ANNA PAL |
Aqui a gente usou CONCAT() pra juntar nome e sobrenome, e UPPER() pra deixar tudo maiúsculo.
Exemplo: padronizando emails
Queremos deixar todos os emails no mesmo formato — minúsculo:
UPDATE students
SET email = LOWER(email);
Agora todos os emails na tabela ficam iguais, não importa como estavam antes.
Como funciona o operador UPDATE tu vai ver nas próximas aulas.
Preparando uma saudação pros usuários
Vamos adicionar ao nome completo a saudação "Bem-vindo":
SELECT CONCAT('Bem-vindo, ', first_name, ' ', last_name, '!') AS greeting
FROM students;
Resultado:
| greeting |
|---|
| Bem-vindo, Otto Art! |
| Bem-vindo, Maria Chi! |
| Bem-vindo, Anna Pal! |
Erros comuns ao trabalhar com funções de texto
Se tu esquecer o espaço no CONCAT(), o resultado pode ficar estranho. Por exemplo:
SELECT CONCAT(first_name, last_name) AS full_name
FROM students;
O resultado vai ser: "OttoArt", "MariaChi". Sempre coloca o espaço onde precisa.
Usando NULL. Se um dos argumentos do CONCAT() for NULL, a string pode ficar incompleta. Por exemplo:
SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;
Se middle_name = NULL, o resultado vai ser "Otto NULL Art". Pra evitar isso, usa a função COALESCE():
SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;
Mais sobre NULL e a função COALESCE() tu vai ver nas próximas aulas :P
GO TO FULL VERSION