2016-10-12 45 views
1

我有一个像Postgres的:提取的最后一个子字符串中的

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

我想提取最后外观的字符串,要么是“同意你的电话”或对“被剥夺”表示是批准还是拒绝。我必须使用特定的子字符串,因为它基于表单,而不仅仅是“批准”和“拒绝”。

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

回答

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 
+0

啊!该窗口功能将起作用。根据测试regexp_matches的natural_ordering看起来是词汇顺序,所以我认为这将是一个很好的修复 – aa260022

相关问题