regex - Postgres : Extract the last substring in a string

标签 regex postgresql position substring

我有一个像

这样的字符串
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/

相关文章:

css - 绝对和静态定位元素元素上的 z-index

regex - Python正则表达式。在匹配问题之间捕获文本

python - 如何在不同时替换所有子字符串的情况下替换子字符串? Python

java - 从一个字符串中提取两个子字符串

sql - 如何按时间戳字段分组?

CSS:屏幕中央位置加载指示器

c# - 用于检查方法内部是否有 "+="的正则表达式

sql - 是否有可能在一个查询中最大程度地出现我表中每个键的值?

postgresql - 如何从 PostgreSQL 数据库中删除表 * 或 * View ?

html - 固定位置突破父 div