微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组 – 从正则表达式结果中删除大括号

问题

这段代码

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

使用Postgresql 9.x删除大括号的最有效方法是什么?

解决方法

最优解

您的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 举报,一经查实,本站将立刻删除。

相关推荐