Muitos RDBMSs têm um
INSTR()
função que nos permite encontrar uma substring dentro de uma string. Alguns (como MySQL e MariaDB) também possuem um LOCATE()
função e um POSITION()
função (também suportada pelo PostgreSQL), que fazem algo semelhante. SQL Server não tem um
INSTR()
função. Nem tem um LOCATE()
ou POSITION()
função. Mas tem o CHARINDEX()
função que faz a mesma coisa. SQL Server também tem o
PATINDEX()
função, que faz um trabalho semelhante ao CHARINDEX()
. O CHARINDEX()
Função
Aqui está um exemplo do
CHARINDEX()
função:SELECT CHARINDEX('news', 'No news is good news');
Resultado:
4
A função aceita um terceiro argumento que nos permite especificar onde iniciar a pesquisa:
SELECT CHARINDEX('news', 'No news is good news', 5);
Resultado:
17
Neste exemplo, iniciamos a busca na posição 5, que foi após o início da primeira ocorrência de
news
, então retornou a posição da segunda ocorrência. O PATINDEX()
Função
O
PATINDEX()
função é semelhante a CHARINDEX()
, exceto que nos permite procurar um padrão, em vez de uma string específica. Aqui está um exemplo para ilustrar o que quero dizer:
SELECT PATINDEX('%ew%', 'No news is good news');
Resultado:
5
Aqui está o que acontece se eu remover os caracteres curinga:
SELECT PATINDEX('ew', 'No news is good news');
Resultado:
0
Veja
PATINDEX()
vs CHARINDEX()
para saber mais sobre as diferenças entre essas duas funções.