问题
这段代码:
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?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。