Эквивалент Db2 locate_in_string в PostgreSQL - PullRequest
0 голосов
/ 26 марта 2020

при переходе с DB2 на PostgreSQL я нашел некоторые представления, используя функцию locate_in_string() db2, которая возвращает позицию указанного экземпляра данной подстроки.

Например:

LOCATE_IN_STRING('aaabaabbaaaab','b',1,3); -- returns 8, for the 3d instance of 'b'
LOCATE_IN_STRING('aaabaabbaaaab','b',1,1); -- returns 4, for the 1st instance of 'b'

К сожалению, функция PostgreSQLs position() дает мне только позицию для первого экземпляра.

Я не нашел ничего похожего в PostgreSQL.

Есть ли альтернатива или обходной путь? (может быть, регулярное выражение?)?

1 Ответ

0 голосов
/ 27 марта 2020

Может быть другой метод, это довольно грубая сила.

Он разбивает строку на основе искомого шаблона. Затем складывается длина кусков:

select v.*,
       (select coalesce(sum(length(el)), 0) + count(*) * length(v.splitter)
        from unnest( (regexp_split_to_array(v.val, v.splitter))[1:v.n] ) el
       ) as pos
from (values ('aaabaabbaaaab', 3, 'b'), ('aaabaabbaaaab', 1, 'b')
     ) v(val, n, splitter);
...