0Pricing
Coding Interview Prep · Aula

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 Coding 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 Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding 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; -- 4

Extraindo 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 ou CONCAT().

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) / RPAD preenchem 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 + POSITION fazem a extração por localização.
  • Concatene com || (PostgreSQL), CONCAT (MySQL) ou + (SQL Server) e lembre-se da propagação de NULL; prefira CONCAT_WS.
  • Divida com SPLIT_PART (PostgreSQL) ou com SUBSTRING_INDEX aninhado (MySQL).
  • REPLACE, TRIM, LPAD, UPPER/LOWER fazem 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 Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding 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 Coding 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 Coding Interview Prep?

Nenhuma experiência prévia é necessária. Coding 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 Coding Interview Prep?

Sim. Cada aula de Coding 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

  1. Aritmética de datas e intervalos
  2. Truncando e agrupando datas
  3. Analisando e formatando strings
  4. Fusos horários e marcas de data e hora
← Voltar para Coding Interview Prep