我有一个像
这样的字符串We would like to approve your call, however you have been denied because of reasons
我想提取委托(delegate)人上最后出现的“批准您的调用”或“已被拒绝”,表明它是被批准还是被拒绝。我必须使用特定的子字符串,因为这是基于表单的,而不仅仅是“批准”和“拒绝”。
我的想法是使用 regexp_match 来提取所有外观然后抓取最后一行,但是没有办法从 regexp_match 的结果中获取最后一行。
最佳答案
在 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
在旧版本上,您可以使用 window function 执行此操作(尽管它确实依赖于结果集的自然排序,通常最好避免这种排序):
SELECT last_value(m) OVER ()
FROM regexp_matches('abc', '.', 'g') r(m)
LIMIT 1
关于regex - Postgres : Extract the last substring in a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40007655/