Função SUBSTRING do MySQL: Sintaxe, Exemplos e Melhores Práticas

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

A função SUBSTRING no MySQL é uma ferramenta essencial para extrair uma porção de uma string. Com essa função, você pode recuperar apenas a parte necessária de dados de um banco de dados. Por exemplo, é útil para extrair o domínio de um endereço de e-mail do 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 de destino da qual extrair.
  • pos : A posição inicial (índice baseado em 1).
  • len : O número de caracteres a extrair (opcional).

Se pos for positivo, conta a partir do início da string. Se for negativo, conta a partir do final. Se len for omitido, a função extrai da posição especificada até o final da string.

1.2 Casos de Uso da Função SUBSTRING

Essa função é usada para formatar dados de string ou extrair partes específicas, tornando a recuperação e o processamento de dados em bancos de dados mais eficientes.

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

Vamos examinar um exemplo simples para entender como ela funciona.

2.1 Extrair uma 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, começa no 3º caractere, e com len definido como 6, extrai 6 caracteres.

2.2 Omitindo o Comprimento

Se você omitir len, ela extrairá da posição especificada até o final da string.

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

O resultado é "World!", começando do 8º caractere até o final.

2.3 Posição Negativa

Usar um valor negativo permite especificar a posição a partir do final da string.

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

Essa 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.

3.1 Extrair 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;

Essa consulta recupera a string após o símbolo “@”, fornecendo apenas a parte do domínio.

3.2 Extrair Parte de um Código de Produto

Aqui está um exemplo de extração de uma parte específica de um código de produto.

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

Essa consulta extrai 4 caracteres a partir do 5º caractere do código de produto e o exibe como uma nova coluna product_id.

3.3 Usando com Subconsultas

Combiná-la com subconsultas permite extrair dados sob condições complexas.

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

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

4. Comparação com Outras Funções de String

Outras funções com 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 do início da string.
  • RIGHT(str, len) : Recupera o número especificado de caracteres do final da string.
SELECT LEFT('Hello, World!', 5);  -- "Hello"
SELECT RIGHT('Hello, World!', 6); -- "World!"

Essas funções são úteis quando você deseja extrair uma porção de uma string de um final específico.

4.2 Função SUBSTR

SUBSTR é um alias para SUBSTRING e pode ser usado da mesma maneira.

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

Essa consulta retorna "World!" assim como SUBSTRING.

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

Aqui está como usar SUBSTRING de forma mais eficiente e otimizar seu desempenho.

5.1 Otimização de Desempenho

Usar SUBSTRING em grandes conjuntos de dados pode impactar o desempenho. Considere criar índices e verificar o plano de execução da consulta quando necessário. Se você extrair frequentemente a mesma substring, armazenar os resultados em cache também pode ajudar.

5.2 Uso na cláusula WHERE

Você pode usar SUBSTRING em uma cláusula WHERE para pesquisar com base em uma parte de uma string.

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

Esta consulta recupera produtos cujo product_code começa com ‘ABC’.

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

Aqui estão exemplos práticos e boas práticas para usar SUBSTRING.

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;

Esta consulta extrai o primeiro e o último nome de um nome completo separado por um espaço.

6.2 Boas Práticas

  • Extração Mínima : Extraia apenas o que for necessário com SUBSTRING para minimizar o impacto no desempenho.
  • Atenção ao Tipo de Dados : Ao aplicar SUBSTRING a dados numéricos, converta explicitamente para string primeiro.
  • Considerações de Índice : Usar SUBSTRING em uma cláusula WHERE pode impedir o uso de índices, portanto verifique o desempenho da sua consulta.

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

Vamos abordar o tratamento de erros e as diferenças no comportamento do SUBSTRING entre versões do MySQL.

7.1 Tratamento de Erros

Se a posição especificada em SUBSTRING estiver fora do intervalo da string, ele retornará uma string vazia. Como isso não é um erro, recomenda‑se adicionar lógica para verificar os resultados antecipadamente.

7.2 Diferenças de Versão

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