- Categorias:
Funções de cadeia de caracteres e binários (Correspondência/Comparação)
POSITION¶
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.
Se você precisar encontrar a posição além da primeira ocorrência (por exemplo, a terceira ocorrência), é possível usar a função REGEXP_INSTR.
- Aliases:
-
Observe que a função CHARINDEX não oferece suporte a uma das variações de sintaxe que a função POSITION suporta.
Sintaxe¶
POSITION( <expr1>, <expr2> [ , <start_pos> ] )
POSITION( <expr1> IN <expr2> )
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 que indica a posição em que a pesquisa deve ser iniciada (com
1
representando o início deexpr2
).Padrão:
1
Retornos¶
Esta função retorna um valor do tipo NUMBER.
Se algum argumento for NULL, a função retornará NULL.
Notas de uso¶
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 retornará
1
.Os tipos de dados dos dois primeiros argumentos devem ser os mesmos (duas cadeias de cadeias de caracteres ou dois 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¶
Os exemplos a seguir usam a função POSITION.
Expressões VARCHAR¶
Encontrar a primeira ocorrência de ‘an’ em ‘banana’:
SELECT POSITION('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
| 2 |
+-----------------------------+
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 POSITION('an', 'banana', 3);
+-----------------------------+
| POSITION('AN', 'BANANA', 3) |
|-----------------------------|
| 4 |
+-----------------------------+
Procurar por vários caracteres, incluindo caracteres unicode, em cadeias de caracteres:
SELECT n, h, POSITION(n IN h) FROM pos;
+--------+---------------------+------------------+
| N | H | POSITION(N IN 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 |
+--------+---------------------+------------------+
Expressões BINARY¶
Como os valores abaixo são representações hexadecimais, um único byte BINARY é representado como dois dígitos hexadecimais.
Neste exemplo, o valor retornado é 3
porque ‘EF’ corresponde ao 3º byte (o primeiro byte é ‘AB’; o segundo byte é ‘CD’ e o terceiro byte é ‘EF’):
SELECT POSITION(X'EF', X'ABCDEF');
+----------------------------+
| POSITION(X'EF', X'ABCDEF') |
|----------------------------|
| 3 |
+----------------------------+
Neste exemplo, não há correspondência. Embora a sequência ‘BC’ pareça estar no valor sendo pesquisado, o ‘B’ é o segundo nybble do primeiro byte, e o ‘C’ é o primeiro nybble do segundo byte. Na verdade, nenhum byte contém ‘BC’, então o valor retornado é 0
(não encontrado).
SELECT POSITION(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
| 0 |
+--------------------------+