在 Postgres 中,我试图在服务器数据的结果行中包含指向特定服务器的逗号分隔的链接 IP 地址列表。
最初我使用了 FILTER 功能,这对于我的目的来说似乎是理想的
STRING_AGG(ipadd, ',') FILTER ( WHERE ipadd is NULL OR ipadd != '') AS ipaddresses
生成结果行如
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
但是,据了解,将要运行的服务器使用不支持 FILTER 功能的较低版本的 postgresql。
因此,我需要简化对
的调用STRING_AGG(ipadd, ',') AS ipaddresses
由于从第二个表返回的多行中可能存在空条目或空条目,因此返回如下内容:
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,,
每个空或空条目都会生成另一个空字段,该字段包含在正确的数据中。
是否有一种预过滤方法可以实现与上面的过滤查询相同的结果,或者甚至只是删除所有不分隔两个返回数据的逗号实例。
目前,我只是在调用后在服务器端解析这些内容,但如果可能的话,我更愿意在 SQL 端进行解析。
最佳答案
string_agg()
将忽略 null
反正值所以过滤 is null
真的没有必要。
过滤条件ipadd <> ''
可以通过简单地将空字符串“转换”为 null
来替换值(然后聚合函数将忽略该值)
string_agg(nullif(ipadd,''), ',')
关于sql - postgres 中没有 FILTER 的潜在空字段的字符串聚合。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013616/