Analisando e formatando strings
SUBSTRING, posição, divisão e conversão de maiúsculas e minúsculas entre diferentes dialetos.
Analisando e formatando strings é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.
Por que perguntam sobre funções de texto
Dados reais são desorganizados: nomes completos que precisam ser divididos, domínios de e-mail a extrair, códigos incorporados em identificadores e diferenças inconsistentes entre maiúsculas e minúsculas. Os entrevistadores usam a manipulação de texto para verificar se você consegue limpar e remodelar dados sem exportá-los para um programa.
Assim como acontece com datas, as funções são apenas parcialmente padronizadas, portanto o objetivo é conhecer o conceito e as variantes comuns.
- Extração de trechos de texto e posição
- Concatenação
- Divisão e substituição
- Conversão entre maiúsculas e minúsculas e remoção de espaços
SUBSTRING e posição
SUBSTRING(s FROM start FOR length) é a forma padrão do SQL; a maioria dos mecanismos também aceita SUBSTRING(s, start, length). As posições em um texto são indexadas a partir de 1, uma fonte clássica de erros de deslocamento para programadores acostumados a linguagens indexadas a partir de 0.
POSITION(sub IN s) (ou STRPOS/CHARINDEX) localiza o início de um trecho de texto, retornando 0 quando ele não é encontrado.
SELECT
SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year, -- '2024'
POSITION('-' IN 'INV-2024-042') AS first_dash; -- 4Extraindo um domínio de e-mail
Este é um exemplo prático clássico. Localize o @ e depois extraia tudo que vem após ele. Combinar POSITION com SUBSTRING é a abordagem portável.
No PostgreSQL, você também pode usar SPLIT_PART(email, '@', 2), que é mais claro e vale a pena mencionar como a resposta idiomática.
-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;Concatenação entre dialetos
Concatenar textos varia conforme o dialeto, e os entrevistadores esperam que você conheça as variantes.
- Padrão SQL / PostgreSQL / Oracle: o operador
||. - MySQL:
CONCAT(a, b, c)(o operador||é, por padrão, o operador lógico OR). - SQL Server:
+para textos ouCONCAT().
CONCAT() trata NULL como uma cadeia vazia, enquanto || e + normalmente tornam todo o resultado NULL se algum operando for NULL, uma fonte sutil de erros.
-- Postgres
SELECT first_name || ' ' || last_name AS full_name FROM people;
-- MySQL / SQL Server
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM people;A armadilha da concatenação com NULL
Dando continuidade à cena anterior: se last_name for NULL, então first_name || ' ' || last_name produzirá NULL no PostgreSQL, eliminando o nome inteiro.
A correção preventiva é usar COALESCE nas partes que podem ser NULL ou usar CONCAT_WS (concatenação com separador), que ignora valores NULL e insere o separador apenas entre os valores presentes.
-- Safe in Postgres / MySQL
SELECT CONCAT_WS(' ', first_name, last_name) AS full_name FROM people;
-- Or guard each part
SELECT first_name || ' ' || COALESCE(last_name, '') FROM people;Dividindo textos
“Extraia o terceiro segmento de um código separado por hífens” é um teste de divisão de textos. O SPLIT_PART(s, delim, n) do PostgreSQL retorna diretamente a enésima parte e é a ferramenta mais clara.
O MySQL não oferece uma divisão direta; o padrão usual é aninhar SUBSTRING_INDEX: extraia as primeiras n partes e depois a última delas.
-- Postgres
SELECT SPLIT_PART('a-b-c-d', '-', 3); -- 'c'
-- MySQL: third part of a-b-c-d
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a-b-c-d', '-', 3), '-', -1); -- 'c'Substituição, remoção e preenchimento
Operações de limpeza que os entrevistadores esperam que você reconheça imediatamente:
REPLACE(s, from, to)substitui todas as ocorrências.TRIM(s)remove espaços no início e no fim;TRIM(BOTH 'x' FROM s)remove um caractere específico.LPAD(s, len, ch)/RPADpreenchem até uma largura fixa, o que é útil para completar identificadores com zeros.
SELECT
REPLACE('555.123.4567', '.', '-') AS phone, -- 555-123-4567
TRIM(' hello ') AS clean, -- 'hello'
LPAD('42', 6, '0') AS padded; -- '000042'Conversão entre maiúsculas e minúsculas e comprimento
Normalizar maiúsculas e minúsculas é essencial antes de comparar ou agrupar textos. UPPER e LOWER são universais; INITCAP (PostgreSQL/Oracle) coloca as palavras em formato de título.
LENGTH(s) retorna a contagem de caracteres na maioria dos mecanismos, mas atenção: o SQL Server usa LEN() e, em algumas configurações, LENGTH conta bytes para textos com vários bytes. Mencione essa particularidade ao lidar com dados que não sejam ASCII.
SELECT
LOWER(email) AS email_norm,
INITCAP(city) AS city_pretty, -- Postgres
LENGTH(description) AS chars
FROM places;Correspondência de padrões além de LIKE
Quando LIKE não é suficientemente poderoso, os entrevistadores gostam de perceber que você conhece expressões regulares. O PostgreSQL oferece o operador ~ e REGEXP_REPLACE / REGEXP_MATCHES; o MySQL tem REGEXP / REGEXP_SUBSTR.
Exemplo: mantenha apenas os dígitos de um texto de telefone. Uma expressão regular resolve isso em uma única linha, em vez de uma sequência de chamadas a REPLACE.
-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
AS digits; -- '5551234567'Exemplo mais aprofundado: normalizando e eliminando duplicatas de nomes
Uma tarefa de limpeza combinada. Suponha que os nomes cheguem com espaços extras e uma mistura de maiúsculas e minúsculas, causando duplicatas indevidas. Normalize primeiro e depois agrupe.
Remova os espaços nas extremidades, comprima os espaços internos com uma expressão regular e converta para minúsculas antes de contar os valores distintos. Esse é exatamente o tipo de raciocínio em várias etapas que os entrevistadores valorizam.
SELECT
LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;Convertendo textos em números e datas
Colunas de texto frequentemente armazenam valores que deveriam ser números ou datas. CAST(s AS INTEGER) ou a forma abreviada do PostgreSQL, s::int, faz a conversão, mas falha quando a entrada é inválida.
Para datas, TO_DATE(s, 'YYYY-MM-DD') (PostgreSQL/Oracle) interpreta o valor usando uma máscara de formato explícita, a abordagem mais segura porque elimina a ambiguidade sobre a ordem de dia e mês.
SELECT
CAST(qty_text AS INTEGER) AS qty,
TO_DATE(order_str, 'DD/MM/YYYY') AS order_date
FROM staging;Verificação rápida
Raciocine sobre o comportamento de NULL na concatenação de textos.
Recapitulação: analisando e formatando textos
Pontos principais para levar à entrevista:
- As posições em um texto são indexadas a partir de 1;
SUBSTRING+POSITIONfazem a extração por localização. - Concatene com
||(PostgreSQL),CONCAT(MySQL) ou+(SQL Server) e lembre-se da propagação de NULL; prefiraCONCAT_WS. - Divida com
SPLIT_PART(PostgreSQL) ou comSUBSTRING_INDEXaninhado (MySQL). REPLACE,TRIM,LPAD,UPPER/LOWERfazem a limpeza e a normalização; expressões regulares lidam com os casos difíceis.- Normalize maiúsculas, minúsculas e espaços antes de agrupar para evitar duplicatas indevidas.
Perguntas Frequentes
A aula “Analisando e formatando strings” é grátis?
Sim — o texto completo de “Analisando e formatando strings” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.
O que vou aprender em “Analisando e formatando strings”?
SUBSTRING, posição, divisão e conversão de maiúsculas e minúsculas entre diferentes dialetos. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Interview Prep?
Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Analisando e formatando strings”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Interview Prep?
Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Aritmética de datas e intervalos
- Truncando e agrupando datas
- Analisando e formatando strings
- Fusos horários e marcas de data e hora