Postgres: Извлечение последней подстроки в строке

У меня есть строка вроде

We would like to approve your call, however you have been denied because of reasons

Я хочу извлечь последнее замечание «одобрить ваш звонок» или «было отказано» в принципе, что указывает, было ли оно одобрено или отклонено. Я должен использовать конкретные подстроки, поскольку это основано на форме, а не просто «одобрить» и «уклониться».

Моя идея состояла в том, чтобы использовать regexp_match, чтобы вытащить все видимость, а затем захватить последнюю строку, однако нет возможности получить последнюю строку из результата regexp_match.

regex,postgresql,position,substring,

1

Ответов: 1


1 принят

В Postgres 9.4+ вы можете использовать WITH ORDINALITYдля определения последней строки в regexp_matchesрезультате:

SELECT m
FROM regexp_matches('abc', '.', 'g') WITH ORDINALITY r(m,n)
ORDER BY n DESC
LIMIT 1

В более старых версиях вы можете сделать это с помощью оконной функции (хотя она полагается на естественный порядок набора результатов, чего обычно лучше избегать):

SELECT last_value(m) OVER ()
FROM regexp_matches('abc', '.', 'g') r(m)
LIMIT 1
регулярное выражение, PostgreSQL, положение, подстрока,
Похожие вопросы