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 INSTR
funçã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 INSTR
função retornará zero (0).
O seguinte ilustra a sintaxe da INSTR
função.
INSTR(str,substr);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A INSTR
função aceita dois argumentos:
- The
str
é a string que você deseja pesquisar. - The
substr
é a substring que você deseja pesquisar.
A INSTR
funçã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 INSTR
função execute pesquisas diferenciando maiúsculas de minúsculas em uma sequência não binária, use o BINARY
operador para converter um argumento da INSTR
funçã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 INSTR
string.
SELECT INSTR('MySQL INSTR', 'MySQL');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir retorna o mesmo resultado porque a INSTR
função não diferencia maiúsculas de minúsculas.
SELECT INSTR('MySQL INSTR', 'mysql');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para forçar INSTR
a função a pesquisar com base na distinção entre maiúsculas e minúsculas, você usa o BINARY
operador da seguinte maneira:
SELECT INSTR('MySQL INSTR', BINARY 'mysql');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O resultado é diferente porque mysql vs. MySQL agora com o BINARY
operador.
A função INSTR vs. operador LIKE
Usaremos a products
tabela no banco de dados de exemplo :
Suponha que você queira encontrar um produto cujo nome contenha a car
palavra-chave, você pode usar a INSTR
função da seguinte forma:
SELECT
productName
FROM
products
WHERE
INSTR(productname,'Car') > 0;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Além da INSTR
função, você pode usar o LIKE
operador para corresponder ao Car
padrão.
SELECT
productname
FROM
products
WHERE
productname LIKE '%Car%';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Ambas as consultas retornam o mesmo resultado. Então, qual é mais rápido, o INSTR
ou o LIKE
operador?
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 productname
coluna.
CREATE INDEX idx_products_name ON products(productname);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se você usar o LIKE
operador com a pesquisa de prefixo, nesta coluna indexada o LIKE
operador terá um desempenho mais rápido que a INSTR
função.
Veja a seguinte declaração.
SELECT
productname
FROM
products
WHERE
productname LIKE '1900%';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Você pode verificar isso usando a EXPLAIN
declaração:
EXPLAIN SELECT
productname
FROM
products
WHERE
productname LIKE '1900%';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
E compare com a seguinte instrução que usa a INSTR
função.
EXPLAIN SELECT
productname
FROM
products
WHERE
instr(productname,'1900');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A INSTR
função executa uma varredura na tabela mesmo que a productname
coluna tenha um índice. Isso ocorre porque o MySQL não pode fazer nenhuma suposição sobre a semântica da INSTR
função, pelo que o MySQL pode utilizar seu entendimento da semântica do LIKE
operador.
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
INSTR
função para encontrar a posição da primeira ocorrência de uma substring em uma string.