小编Jam*_*esA的帖子

postgres 中没有 FILTER 的潜在空字段的字符串聚合。

在 Postgres 中,我尝试在服务器数据的结果行中包含到特定服务器的链接 IP 地址的逗号分隔列表。

最初我使用了 FILTER 功能,这似乎非常适合我的目的

STRING_AGG(ipadd, ',') FILTER ( WHERE ipadd is NULL OR ipadd != '') AS ipaddresses 
Run Code Online (Sandbox Code Playgroud)

产生结果行,例如

  server1;data;etc; 1.2.3.4;
  server2;data;etc; 11.22.33.44, 22.33.44.55;
  server3;data;etc;
  server3;data;etc; 23.45.67.89
Run Code Online (Sandbox Code Playgroud)

然而,据了解,它将运行的服务器使用较低版本的 postgresql,它不支持 FILTER 功能。

因此我需要简化对

STRING_AGG(ipadd, ',') AS ipaddresses
Run Code Online (Sandbox Code Playgroud)

由于从第二个表返回的多行中存在可能为空或 null 的条目,因此返回如下内容:

  server1;data;etc; ,1.2.3.4,,,;
  server2;data;etc; 11.22.33.44,,, 22.33.44.55,,,;
  server3;data;etc; ,,,,,,,,,
  server3;data;etc; ,,23.45.67.89,,
Run Code Online (Sandbox Code Playgroud)

每个空或空条目都会生成另一个空字段,该字段包含在正确的数据中。

是否有一种预过滤方法可以实现与上面的过滤查询相同的结果,或者甚至只是删除所有不分隔两个返回数据的逗号实例。

目前,我只是在调用后在服务器端解析这些内容,但如果可能的话,我更愿意在 SQL 端进行解析。

sql postgresql string-aggregation

5
推荐指数
1
解决办法
6404
查看次数

标签 统计

postgresql ×1

sql ×1

string-aggregation ×1