【问题标题】:regular expression | add 3 characters at the end of a string正则表达式 |在字符串末尾添加 3 个字符
【发布时间】:2021-01-04 11:30:31
【问题描述】:

我有多个使用 string_agg 函数的查询,我们正在迁移到更新的 postgres 版本,这个特定的现在需要一个分隔符,我们只需将这个字符串 ,'' 添加到每一行其中使用了 string_agg。

这是我们目前拥有的一个示例:

string_agg('|'||mu_to.unit||(pa.measure*(mu.base_multiplier/mu_to.base_multiplier))::numeric||CAST(' ' AS varchar)||mu_to.unit_display)

它需要像这样结束:

  string_agg('|'||mu_to.unit||(pa.measure*(mu.base_multiplier/mu_to.base_multiplier))::numeric||CAST(' ' AS varchar)||mu_to.unit_display,'')

然后我们有这样的东西:

string_agg('#attribute_'||attribute_id::varchar||':'||attribute) as attr

它需要像这样结束:

string_agg('#attribute_'||attribute_id::varchar||':'||attribute,'') as attr

有 67 个报告,其中这些行随机出现,并不总是相同的字段/表名称,所以我正在寻找一种方法来一次更改所有内容并批量添加分隔符,而不是手动编辑所有 67 个。 类似于 find string_agg( 查找最后一个括号并添加 ,''

我想这将是某种搜索替换,但不能 100% 确定我如何实现这一点。

谢谢,

【问题讨论】:

    标签: postgresql text bulk string-aggregation


    【解决方案1】:

    你现在用什么?从来没有发布过的 PostgreSQL 版本,其中 string_agg 的第二个参数是可选的。 (在 9.0 的开发周期中有一段时间它是可选的,但在发布前已更改)。你真的在使用 10 年前的 PostgreSQL 开发版吗?

    也许您有一个名为 string_agg 的用户定义聚合,它接受一个参数?但是那样的话,为什么你的升级方法不重新创建呢?

    【讨论】:

    • 我们使用的是 postgres 8.4,看来这不是用户定义的函数。我们刚刚在新服务器上安装了较新版本,实际上我们正在迁移所有报告
    • 我有一个 8.4.22 的副本,并且那里没有用于 string_agg 的系统定义聚合(您可以看到在 psql 中使用 \daS)。也许您有一些自定义编译无法正确识别自己。
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2011-02-25
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多