Categorias:

Funções de cadeia de caracteres e binários (Correspondência/Comparação)

CHARINDEX

Procura a primeira ocorrência do primeiro argumento no segundo argumento e, se bem-sucedido, retorna a posição (baseada em 1) do primeiro argumento no segundo argumento.

Aliases:

POSITION

Observe que a função CHARINDEX não oferece suporte a uma das variações de sintaxe que a função POSITION suporta.

Sintaxe

CHARINDEX( <expr1>, <expr2> [ , <start_pos> ] ) 
Copy

Argumentos

Obrigatório:

expr1

Uma cadeia de caracteres ou expressão binária representando o valor a ser buscado.

expr2

Uma cadeia de caracteres ou expressão binária representando o valor a ser pesquisado.

Opcional:

start_pos

Um número indicando a posição de onde iniciar a busca (com 1 representando o início de expr2).

Padrão: 1

Notas de uso

  • Se algum argumento for NULL, a função retorna NULL.

  • Se a cadeia de caracteres ou valor binário não for encontrado, a função retorna 0.

  • Se o opcional especificado start_pos estiver além do fim do segundo argumento (a cadeia de caracteres a pesquisar), a função retornará 0.

  • Se o primeiro argumento estiver vazio (por exemplo, uma cadeia de caracteres vazia), a função retorna 1.

  • Os tipos de dados dos dois primeiros argumentos devem ser os mesmos; ou ambos devem ser cadeias de caracteres ou ambos devem ser valores binários.

Detalhes do agrupamento

Esta função não oferece suporte às seguintes especificações de agrupamento:

  • pi (não identifica pontuação).

  • cs-ai (diferencia maiúsculas e minúsculas, não identifica acentos).

Exemplos

Expressões VARCHAR

Encontrar a primeira ocorrência de ‘an’ em ‘banana’:

select charindex('an', 'banana', 1); +------------------------------+ | CHARINDEX('AN', 'BANANA', 1) | |------------------------------| | 2 | +------------------------------+ 
Copy

Encontrar a primeira ocorrência de ‘an’ em ‘banana’ na ou após a posição 3. Esta busca encontra a segunda ocorrência de ‘an’.

select charindex('an', 'banana', 3); +------------------------------+ | CHARINDEX('AN', 'BANANA', 3) | |------------------------------| | 4 | +------------------------------+ 
Copy

Procurar por vários caracteres, incluindo caracteres unicode, em cadeias de caracteres:

SELECT n, h, CHARINDEX(n, h) FROM pos; +--------+---------------------+-----------------+ | N | H | CHARINDEX(N, H) | |--------+---------------------+-----------------| | | | 1 | | | sth | 1 | | 43 | 41424344 | 5 | | a | NULL | NULL | | dog | catalog | 0 | | log | catalog | 5 | | lésine | le péché, la lésine | 14 | | nicht | Ich weiß nicht | 10 | | sth | | 0 | | ☃c | ☃a☃b☃c☃d | 5 | | ☃☃ | bunch of ☃☃☃☃ | 10 | | ❄c | ❄a☃c❄c☃ | 5 | | NULL | a | NULL | | NULL | NULL | NULL | +--------+---------------------+-----------------+ 
Copy

Expressões BINARY

Observe que como os valores abaixo são representações hexadecimais, um único byte BINARY é representado como dois dígitos hexadecimais.

Neste exemplo, o valor retornado será 3 porque ‘EF’ corresponde ao terceiro byte (o primeiro byte é ‘AB’; o segundo byte é ‘CD’ e o terceiro byte é ‘EF’):

SELECT CHARINDEX(X'EF', X'ABCDEF'); +-----------------------------+ | CHARINDEX(X'EF', X'ABCDEF') | |-----------------------------| | 3 | +-----------------------------+ 
Copy

Neste exemplo, não há correspondência. Embora a sequência ‘BC’ pareça estar no valor pesquisado, o ‘B’ é o segundo nibble do primeiro byte, e o ‘C’ é o primeiro nibble do segundo byte; nenhum byte contém realmente ‘BC’, portanto o valor retornado será 0 (não encontrado).

SELECT CHARINDEX(X'BC', X'ABCD'); +---------------------------+ | CHARINDEX(X'BC', X'ABCD') | |---------------------------| | 0 | +---------------------------+ 
Copy