Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

INSTR() Equivalente no SQL Server


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.