- 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.
- 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 indicando a posição de onde iniciar a busca (com
1
representando o início deexpr2
).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).
Nota
Para usar esta função com uma coluna que tenha os especificadores de agrupamento upper
ou lower
, você deve ativar o pacote de mudança de comportamento 2024_02 em sua conta.
Para ativar este pacote em sua conta, execute a seguinte instrução:
SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Exemplos¶
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¶
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 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 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 position(X'BC', X'ABCD'); +--------------------------+ | POSITION(X'BC', X'ABCD') | |--------------------------| | 0 | +--------------------------+