Postgres:提取字符串

时间:2016-10-12 20:21:21

标签: regex postgresql position substring

我有一个像

这样的字符串
We would like to approve your call, however you have been denied because of reasons

我想要提取最后外观"批准您的通话"或者"被拒绝"在校长,表明它是否被批准或拒绝。我必须使用特定的子字符串,因为这是基于一个表单,而不仅仅是"批准"并且"拒绝"。

我的想法是使用regexp_match来取出所有外观,然后抓住最后一行,但是没有办法从regexp_match的结果中获取最后一行。

1 个答案:

答案 0 :(得分: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

在旧版本中,您可以使用window function执行此操作(尽管它确实依赖于结果集的自然顺序,这通常是最好的避免):

SELECT last_value(m) OVER ()
FROM regexp_matches('abc', '.', 'g') r(m)
LIMIT 1