POSITION é uma função de manipulação de cadeias que manipula todos os tipos de dados (BIT, BLOB e CHARACTER) e retorna a posição de uma cadeia dentro de outra.
>>-POSITION--(--SearchExpression--IN--SourceExpression--+----------------------+--> '-FROM--FromExpression-' >--+--------------------------+--)----------------------------->< '-REPEAT--RepeatExpression-'
POSITION retorna um inteiro que fornece a posição de uma cadeia (SearchExpression) em uma segunda cadeia (SourceExpression). Uma posição de um corresponde ao primeiro caractere da cadeia de origem.
Se estiver presente, a cláusula FROM fornece a posição dentro da cadeia de procura na qual a procura se inicia. Na ausência de uma cláusula FROM, a cadeia de origem é pesquisada a partir do início.
Se estiver presente, a cláusula REPEAT fornece uma contagem de repetições, informando a posição retornada como a da n-ésima ocorrência da cadeia de procura dentro da cadeia de origem. Se a contagem de repetição for negativa, a cadeia de origem será pesquisada a partir do final.
Na ausência de uma cláusula REPEAT, considera-se uma contagem de repetições igual a +1; isto é, retorna-se a posição da primeira ocorrência, a partir do início da procura. Se a cadeia de pesquisa tiver um comprimento zero, o resultado será um.
Se a cadeia de procura não puder ser encontrada, o resultado será zero: se a cláusula FROM estiver presente, isso se aplica somente à seção da cadeia de origem que está sendo pesquisada; se a cláusula REPEAT estiver presente, isso se aplica somente se houver ocorrências insuficientes da cadeia.
Se qualquer parâmetro for NULL, o resultado será NULL.
As cadeias de procura e de origem podem ser dos tipos de dados CHARACTER, BLOB ou BIT, mas devem ser do mesmo tipo.
POSITION('Village'
IN 'Hursley Village'); retorna 9
POSITION('Town' IN 'Hursley Village'); retorna 0
POSITION ('B' IN 'ABCABCABCABCABC'); -> retorna 2
POSITION('D' IN 'ABCABCABCABCABC'); -> retorna 0
POSITION('A' IN 'ABCABCABCABCABC' FROM 4); -> retorna 4
POSITION('C' IN 'ABCABCABCABCABC' FROM 2); -> retorna 3
POSITION('B' IN 'ABCABCABCABCABC' REPEAT 2); -> retorna 5
POSITION('C' IN 'ABCABCABCABCABC' REPEAT 4); -> retorna 12
POSITION('A' IN 'ABCABCABCABCABC' FROM 4 REPEAT 2); -> retorna 7
POSITION('AB' IN 'ABCABCABCABCABC' FROM 2 REPEAT 3); -> retorna 10
POSITION('A' IN 'ABCABCABCABCABC' REPEAT -2); -> retorna 10
POSITION ('BC' IN 'ABCABCABCABCABC' FROM 2 REPEAT -3); -> retorna 5