Postgres:提取字符串中的最后一个子字符串
Postgres: Extract the last substring in a string
我有一个像
这样的字符串
We would like to approve your call, however you have been denied because of reasons
我想提取主体上 "approve your call" 或 "have been denied" 的 last 外观,表明它是被批准还是被拒绝。我必须使用特定的子字符串,因为这是基于一种形式,而不仅仅是 "approve" 和 "decline".
我的想法是用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
我有一个像
这样的字符串We would like to approve your call, however you have been denied because of reasons
我想提取主体上 "approve your call" 或 "have been denied" 的 last 外观,表明它是被批准还是被拒绝。我必须使用特定的子字符串,因为这是基于一种形式,而不仅仅是 "approve" 和 "decline".
我的想法是用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