将regexp_matches的结果检索为一行

时间:2013-05-17 12:52:35

标签: regex postgresql

所以,如果有这个字符串aassdd

此代码:

regexp_matches('aassdd', 'a', 'g')

返回2个不同的行。

可以将所有匹配作为一行检索吗?例如,当array类型作为一行时,来自上面的代码,需要的结果是:{a,a}

4 个答案:

答案 0 :(得分:14)

regexp_matches()返回一个集而不是一个标量的事实是可以理解的,但仍然有点烦人。

我找到的唯一解决方法是这个有点丑陋的查询:

select array_agg(i)
from (
   select (regexp_matches('aassdd', 'a', 'g'))[1] i 
)  t

答案 1 :(得分:5)

SELECT ARRAY(select array_to_string(regexp_matches('aassdd', 'a', 'g'),''));

答案 2 :(得分:1)

如果regexp_matches()将索引表的一列作为参数,还有一种方法:

SELECT rid, array_agg(number) 
FROM 
    (SELECT 
       rid, 
       (regexp_matches(column,'[0-9]+','g'))[1] as number 
    FROM table) t
GROUP BY rid

答案 3 :(得分:0)

使用plperl

如果你正在寻找一些有效的东西,

CREATE LANGUAGE plperl;

CREATE FUNCTION regexp_return_matches(text, text)
RETURNS text[]
AS $$
  my ( $input, $pattern ) = @_;
  $pattern = quotemeta($pattern);
  return [$input =~ m/($pattern)/g];
$$ LANGUAGE plperl;

SELECT regexp_return_matches('aassdd', 'a');
 regexp_return_matches 
-----------------------
 {a,a}
(1 row)