Aula 12.1 · Tempo de leitura: ~10 min
Esta aula é dedicada ao processamento prático de strings em SQL. Você vai aprender como limpar valores textuais, normalizar caixa, extrair fragmentos úteis e montar campos legíveis para análise e relatórios. Vamos trabalhar com cenários reais usando a base Sakila. Ao final da aula, você conseguirá preparar dados de texto para análise diretamente em SQL.
No módulo anterior, falamos sobre qualidade de código SQL e desempenho de consultas. Agora passamos para análise aplicada: em dados reais, campos de texto muitas vezes não devem apenas ser exibidos, mas antes transformados para uso prático.
O processamento prático de strings é necessário em relatórios, segmentação de usuários, limpeza de dados de referência, preparação de exportações e verificações de qualidade de dados. Essas são exatamente as tarefas que analistas e desenvolvedores encontram no dia a dia.
Funções básicas de string são úteis por si só, mas o valor real aparece quando você as aplica a uma tarefa concreta. Por exemplo, o mesmo e-mail pode ser usado para verificar qualidade de dados, segmentar por domínio e preparar um relatório de marketing.
Na prática, o processamento de strings em SQL geralmente se resume a quatro tipos de tarefas:
Na maioria dos casos, o texto é processado por etapas:
Essa abordagem torna as consultas mais previsíveis e facilita a depuração.
SELECT
LOWER(TRIM(email)) AS email_normalized
FROM customer
LIMIT 5;
Resultado: o e-mail é limpo nas bordas e convertido para minúsculas.
O cenário mais comum é preparar uma string para análise posterior. Para isso, normalmente usamos TRIM(), LOWER(), UPPER() e REPLACE().
SELECT
customer_id,
email,
LOWER(TRIM(email)) AS email_normalized
FROM customer
LIMIT 10;
Observação: mesmo quando os dados já parecem limpos, a normalização ajuda em comparações, agrupamentos e processamento automatizado.
SELECT
address_id,
address,
TRIM(REPLACE(address, 'Street', 'St.')) AS address_cleaned
FROM address
LIMIT 10;
Resultado: o endereço fica mais curto e consistente, o que facilita o uso em relatórios e interfaces.
Depois da limpeza, muitas vezes você precisa apenas de uma parte da string para análise. No MySQL, SUBSTRING(), LEFT(), RIGHT() e SUBSTRING_INDEX() são especialmente úteis.
SELECT
customer_id,
email,
SUBSTRING_INDEX(LOWER(TRIM(email)), '@', -1) AS email_domain
FROM customer
LIMIT 10;
Resultado: a parte de domínio é extraída do e-mail, por exemplo example.com.
SELECT
film_id,
title,
LEFT(title, 5) AS title_prefix,
RIGHT(title, 5) AS title_suffix
FROM film
LIMIT 10;
Observação: esses fragmentos podem ser úteis para heurísticas rápidas, verificação de padrões de nomenclatura e criação de rótulos curtos.
Em análise de dados, frequentemente precisamos de rótulos legíveis em vez de campos brutos. Para isso, CONCAT() e CONCAT_WS() são práticos.
SELECT
customer_id,
CONCAT_WS(
' | ',
CONCAT_WS(' ', first_name, last_name),
LOWER(TRIM(email)),
CONCAT('store=', store_id)
) AS customer_label
FROM customer
LIMIT 10;
Resultado: você obtém um campo textual compacto, útil para relatórios administrativos, arquivos de exportação e ferramentas internas.
Processamento de strings não serve apenas para formatação, mas também para validação básica. SQL não substitui um sistema completo de validação, mas permite encontrar rapidamente valores suspeitos.
@SELECT
customer_id,
email
FROM customer
WHERE INSTR(LOWER(TRIM(email)), '@') = 0;
Resultado: a consulta retorna registros em que o e-mail não contém o separador obrigatório.
SELECT
film_id,
title,
CHAR_LENGTH(title) AS title_length
FROM film
WHERE CHAR_LENGTH(title) > 20
ORDER BY title_length DESC
LIMIT 10;
Observação: verificações como essa ajudam a encontrar valores longos demais para cards, telas de interface ou limites de exportação.
Agora vamos combinar várias técnicas em uma única consulta analítica. Suponha que precisemos entender quais domínios são mais frequentes entre os clientes.
SELECT
SUBSTRING_INDEX(LOWER(TRIM(email)), '@', -1) AS email_domain,
COUNT(*) AS customer_count
FROM customer
WHERE email IS NOT NULL
AND INSTR(LOWER(TRIM(email)), '@') > 0
GROUP BY SUBSTRING_INDEX(LOWER(TRIM(email)), '@', -1)
ORDER BY customer_count DESC, email_domain
LIMIT 15;
Resultado: você obtém a distribuição de clientes por domínio de e-mail. Essa consulta é útil para exploração inicial da audiência, detecção de anomalias e preparação de segmentos de comunicação.
Este exemplo mostra um ponto importante: funções de string são mais poderosas em cadeia. Primeiro limpamos o valor, depois validamos a estrutura, em seguida extraímos o domínio e só então agregamos.
CTE ou subconsulta para melhorar a legibilidade.SUBSTRING_INDEX() é muito útil no MySQL, mas outros SGBDs podem exigir sintaxe diferente.Principais conclusões desta aula:
TRIM, LOWER, REPLACE, SUBSTRING_INDEX, LEFT, RIGHT e CONCAT_WS são especialmente úteis no trabalho diário.Porque mesmo dados aparentemente limpos podem conter espaços extras, caixa inconsistente ou pequenas variações de formato. A normalização torna filtros, comparações e agrupamentos mais confiáveis.
O domínio ajuda a segmentar usuários, identificar endereços corporativos e detectar anomalias. É uma forma simples de transformar um campo textual bruto em atributo analítico.
Quando esses campos são necessários para relatórios, interfaces administrativas, exportações ou análises intermediárias. Nesses casos, montar rótulos no SQL reduz pós-processamento e mantém a lógica próxima dos dados.
Normalmente: limpeza de texto, normalização de formato, extração de atributos e validação de dados. Na prática, essas funções são usadas antes de agrupamentos, segmentações e montagem de campos de relatório.
TRIM() e LOWER() antes de GROUP BY em colunas de texto?Sem normalização, o mesmo valor pode cair em grupos diferentes por causa de caixa distinta ou espaços extras. A limpeza prévia melhora a precisão da agregação e reduz diferenças falsas.
SUBSTRING_INDEX() com um exemplo prático?No MySQL, essa função é útil para extrair rapidamente uma parte da string usando um separador. Por exemplo, você pode extrair o domínio de um e-mail e usar isso imediatamente em segmentação de usuários ou relatórios analíticos.
Na próxima aula, vamos avançar para o uso de SQL em análise e relatórios e ver como transformar dados preparados em insights de negócio úteis.