Postgres中无需GROUP BY将JSONB数组转为逗号分隔字符串
解决方案
针对你的JSONB字符串数组转逗号分隔字符串的需求,推荐使用PostgreSQL内置函数组合实现,完全避免误处理元素内特殊字符,且无需CTE、自定义函数或GROUP BY:
推荐方案(PostgreSQL 12+)
使用jsonb_array_to_text_array将JSONB数组转为原生text数组,再通过array_to_string拼接:
SELECT array_to_string(jsonb_array_to_text_array(my_column_name), ',') AS comma_separated FROM your_table;
效果验证
- 当列值为
["foo", "bar"]时,返回foo,bar - 当列值为
["a[]", "b\"c"](元素含特殊字符)时,返回a[],b"c(完整保留元素内容) - 当列值为
[]时,返回空字符串
低版本兼容方案(PostgreSQL <12)
如果你的PostgreSQL版本低于12,jsonb_array_to_text_array函数不存在,可使用jsonb_array_elements_text结合string_agg,无需显式GROUP BY:
SELECT string_agg(elem, ',') AS comma_separated FROM your_table, jsonb_array_elements_text(my_column_name) elem;
注:该方案利用横向连接特性,自动为每一行的数组元素单独聚合,不会产生跨行列的聚合结果。
内容的提问来源于stack exchange,提问作者Saif
相关产品推荐
相关产品推荐

