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 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