Função INSTR() do MySQL

Resumo : Este tutorial mostra como usar a INSTR()função MySQL para retornar a posição da primeira ocorrência de uma string.

Introdução à função MySQL INSTR()

Às vezes, você deseja localizar uma substring em uma string ou verificar se existe uma substring em uma string. Nesse caso, você pode usar uma função interna de string chamada INSTR.

A INSTRfunção retorna a posição da primeira ocorrência de uma substring em uma string. Se a substring não for encontrada em str, a INSTRfunção retornará zero (0).

O seguinte ilustra a sintaxe da INSTRfunção.

INSTR(str,substr);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

A INSTRfunção aceita dois argumentos:

  • The stré a string que você deseja pesquisar.
  • The substré a substring que você deseja pesquisar.

A INSTRfunção não diferencia maiúsculas de minúsculas. Isso significa que não importa se você passa letras minúsculas, maiúsculas, maiúsculas, etc., os resultados são sempre os mesmos.

Se você deseja que a INSTRfunção execute pesquisas diferenciando maiúsculas de minúsculas em uma sequência não binária, use o BINARYoperador para converter um argumento da INSTRfunção de uma sequência não binária para uma sequência binária.

Os exemplos da função INSTR() do MySQL

A instrução a seguir retorna a posição da substring MySQL na MySQL INSTRstring.

SELECT INSTR('MySQL INSTR', 'MySQL');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Exemplo MySQL INSTR

A instrução a seguir retorna o mesmo resultado porque a INSTRfunção não diferencia maiúsculas de minúsculas.

SELECT INSTR('MySQL INSTR', 'mysql');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Para forçar INSTRa função a pesquisar com base na distinção entre maiúsculas e minúsculas, você usa o BINARYoperador da seguinte maneira:

SELECT INSTR('MySQL INSTR', BINARY 'mysql');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Exemplo de MySQL INSTR com distinção entre maiúsculas e minúsculas

O resultado é diferente porque mysql vs. MySQL agora com o BINARYoperador.

A função INSTR vs. operador LIKE

Usaremos a productstabela no banco de dados de exemplo :

Suponha que você queira encontrar um produto cujo nome contenha a carpalavra-chave, você pode usar a INSTRfunção da seguinte forma:

SELECT 
    productName
FROM
    products
WHERE
    INSTR(productname,'Car') > 0;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

MySQL INSTR na cláusula WHERE

Além da INSTRfunção, você pode usar o LIKEoperador para corresponder ao Carpadrão.

SELECT 
    productname
FROM
    products
WHERE
    productname LIKE '%Car%';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Ambas as consultas retornam o mesmo resultado. Então, qual é mais rápido, o INSTRou o LIKEoperador?

A resposta é que eles são iguais. Eles diferenciam maiúsculas de minúsculas e executam varreduras completas da tabela.

Vamos criar um índice na productnamecoluna.

CREATE INDEX idx_products_name ON products(productname);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Se você usar o LIKEoperador com a pesquisa de prefixo, nesta coluna indexada o LIKEoperador terá um desempenho mais rápido que a INSTRfunção.

Veja a seguinte declaração.

SELECT 
    productname
FROM
    products
WHERE
    productname LIKE '1900%';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

MySQL INSTR versus LIKE

Você pode verificar isso usando a EXPLAINdeclaração:

EXPLAIN SELECT 
    productname
FROM
    products
WHERE
    productname LIKE '1900%';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

MySQL INSTR LIKE com INDEX

E compare com a seguinte instrução que usa a INSTRfunção.

EXPLAIN SELECT 
    productname
FROM
    products
WHERE
    instr(productname,'1900');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

MySQL INSTR com INDEX

A INSTRfunção executa uma varredura na tabela mesmo que a productnamecoluna tenha um índice. Isso ocorre porque o MySQL não pode fazer nenhuma suposição sobre a semântica da INSTRfunção, pelo que o MySQL pode utilizar seu entendimento da semântica do LIKEoperador.

A maneira mais rápida de testar se existe uma substring em uma string é usar um índice de texto completo . No entanto, requer configuração e manutenção adequada do índice.

Resumo

  • Use a INSTRfunção para encontrar a posição da primeira ocorrência de uma substring em uma string.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *