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:

  • lower.

  • upper.

  • 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