问题
这段代码:
select x::text from regexp_matches( 'i1 into o2,and g1 into o17','[gio][0-9]{1,}','g' ) as x;
返回这些结果:
{i1} {o2} {g1} {o17}
而不是以下结果:
i1 o2 g1 o17
相关链接
> http://www.postgresql.org/docs/9.1/static/functions-matching.html
题
解决方法
最优解
您的regexp_matches()
模式每个模式评估只能生成一个元素,因此所有生成的行都只限于一个数组元素.表达式简化为:
SELECT x[1] FROM regexp_matches('i1 into o2,'g') AS x;
其他方案
SELECT unnest(x) -- also works for cases with multiple elements per result row SELECT trim(x::text,'{}') -- corner cases with results containing `{}` SELECT rtrim(ltrim(x::text,'{'),'}') AS x1 -- fewer corner cases
如果模式每个输入值可以匹配或不匹配多次,也可以删除可选参数’g’.
如果函数总是返回一行,请考虑与Postgres 10一起引入的略有不同的变体regexp_match()
.
在Postgres 10或更高版本中,由于SELECT列表中的多个SRF的行为最终已被清理,因此在SELECT列表中直接建议设置返回函数(SRF)regexp_matches()
(如What is the expected behaviour for multiple set-returning functions in select clause?