MySQL SUBSTRING() Explicado: Extraia Partes de uma String com Exemplos

1. O que é a função SUBSTRING?

A função SUBSTRING é uma importante função do MySQL usada para extrair uma substring de uma string. Com essa função, você pode obter apenas a parte que precisa dos dados armazenados em um banco de dados. Por exemplo, ela é útil quando você quer extrair a parte do domínio do endereço de e‑mail de um usuário, ou recuperar uma seção específica de um código de produto.

1.1 Sintaxe Básica

A sintaxe básica da função SUBSTRING é a seguinte:

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
  • str : A string da qual extrair.
  • pos : A posição inicial (começa em 1).
  • len : O número de caracteres a extrair (opcional).

Se pos for um valor positivo, o MySQL conta para frente a partir do início da string. Se for negativo, o MySQL conta para trás a partir do final da string. Se len for omitido, o MySQL extrai da posição especificada até o final da string.

1.2 Casos de Uso da função SUBSTRING

Esta função é usada para formatar dados de texto e extrair partes específicas, facilitando a busca e o processamento de informações de forma eficiente em um banco de dados.

2. Uso Básico da função SUBSTRING

Para entender o básico, vamos ver alguns exemplos simples.

2.1 Extraindo parte de uma string

A consulta a seguir extrai 6 caracteres a partir do 3.º caractere da string “Hello, World!”.

SELECT SUBSTRING('Hello, World!', 3, 6);

O resultado é "llo, W". Como pos é 3, a extração começa no 3.º caractere, e como len é 6, são extraídos 6 caracteres.

2.2 Omitindo o parâmetro de comprimento

Se você omitir len, o MySQL extrai da posição especificada até o final da string.

SELECT SUBSTRING('Hello, World!', 8);

O resultado é "World!", que recupera tudo a partir do 8.º caractere até o final.

2.3 Usando uma posição negativa

Se você usar um valor negativo, pode especificar a posição a partir do final da string.

SELECT SUBSTRING('Hello, World!', -5);

Esta consulta retorna "orld!", extraindo os últimos 5 caracteres.

3. Aplicações Práticas da função SUBSTRING

A função SUBSTRING é frequentemente usada em operações de dados do mundo real. Aqui estão alguns exemplos práticos.

3.1 Extraindo o domínio de um endereço de e‑mail

Combinando SUBSTRING com LOCATE, você pode extrair a parte do domínio de um endereço de e‑mail.

SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;

Esta consulta extrai a string após “@” e devolve apenas a parte do domínio.

3.2 Extraindo parte de um código de produto

Este exemplo extrai uma seção específica de um código de produto.

SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;

Nesta consulta, 4 caracteres a partir do 5.º caractere do código do produto são extraídos e exibidos como uma nova coluna chamada product_id.

3.3 Usando em uma subconsulta

Combinando-a com uma subconsulta, você pode extrair dados sob condições mais complexas.

SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;

Esta consulta extrai os primeiros 10 caracteres de description dos produtos onde category é ‘Electronics’.

4. Comparação com outras funções de string

Outras funções que podem ser usadas para propósitos semelhantes ao SUBSTRING incluem LEFT, RIGHT e SUBSTR.

4.1 Funções LEFT e RIGHT

  • LEFT(str, len) : Recupera o número especificado de caracteres a partir do início da string.
  • RIGHT(str, len) : Recupera o número especificado de caracteres a partir do final da string.
    SELECT LEFT('Hello, World!', 5);  -- "Hello"
    SELECT RIGHT('Hello, World!', 6); -- "World!"
    

Essas funções são convenientes quando você deseja extrair uma substring do início ou do final de uma string.

4.2 Função SUBSTR

SUBSTR é um alias para SUBSTRING, portanto pode ser usado da mesma forma.

SELECT SUBSTR('Hello, World!', 8); -- "World!"

Esta consulta retorna "World!", assim como SUBSTRING.

5. Uso Avançado e Otimização da Função SUBSTRING

Esta seção explica usos mais avançados e técnicas de otimização.

5.1 Otimização de Desempenho

Usar SUBSTRING em grandes conjuntos de dados pode afetar o desempenho. Se necessário, crie índices e verifique o plano de execução da consulta. Além disso, se você extrair frequentemente o mesmo trecho, considere armazenar o resultado em cache.

5.2 Usando em uma cláusula WHERE

Você pode usar SUBSTRING em uma cláusula WHERE para filtrar registros com base em uma condição de substring.

SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';

Esta consulta procura produtos onde os primeiros 3 caracteres de product_code são ‘ABC’.

6. Exemplos e Boas Práticas para a Função SUBSTRING

Aqui estão exemplos práticos de uso do SUBSTRING e boas práticas para o trabalho real.

6.1 Código de Exemplo

O exemplo a seguir divide o nome completo de um cliente em nome e sobrenome.

SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
       SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;

Nesta consulta, o nome e o sobrenome são extraídos de um nome completo separado por um espaço.

6.2 Boas Práticas

  • Extraia apenas o que você precisa: Mantenha o comprimento da substring o menor possível para reduzir o impacto no desempenho.
  • Preste atenção aos tipos de dados: Se você aplicar SUBSTRING a dados numéricos, pode ser necessário convertê‑los explicitamente para string.
  • Considere o uso de índices: Ao usar SUBSTRING em uma cláusula WHERE, os índices podem não ser utilizados de forma eficaz, portanto monitore cuidadosamente o desempenho da consulta.

7. Tratamento de Erros e Diferenças entre Versões

Esta seção aborda o tratamento de erros ao usar SUBSTRING e as diferenças entre versões do MySQL.

7.1 Tratamento de Erros

Se a posição especificada estiver fora do intervalo da string, SUBSTRING retorna uma string vazia. Como isso não é um erro, recomenda‑se adicionar lógica para validar o resultado antecipadamente, se necessário.

7.2 Diferenças entre Versões

Dependendo da versão do MySQL, o comportamento da função SUBSTRING pode variar. Por exemplo, algumas versões mais antigas podem tratar caracteres multibyte de forma diferente. Verifique a compatibilidade entre versões e aplique as medidas adequadas quando necessário.