PostgreSQL中如何将嵌套数组扁平化为一维数组
PostgreSQL嵌套数组扁平化实现方法
针对你给出的嵌套数组{{1,2},{3,4}},可以通过以下几种方式扁平化为一维数组{1,2,3,4}:
方法一:嵌套使用unnest函数结合子查询
这是最直接的原生方法,利用unnest逐层拆解数组:
SELECT array(SELECT unnest(unnest(array[array[1, 2], array[3, 4]])));
执行逻辑:
- 外层
unnest将顶级数组拆分为两个子数组{1,2}和{3,4} - 内层
unnest将每个子数组拆分为单个元素 - 最终用
array()将所有元素重新组合为一维数组
方法二:借助JSONB函数转换
通过JSONB的数组处理能力实现扁平化,适合元素可转换为字符串的场景:
SELECT array_agg(elem::integer) FROM jsonb_array_elements_text(to_jsonb(array[array[1, 2], array[3, 4]])) AS elem;
执行逻辑:
to_jsonb将嵌套数组转换为JSONB格式jsonb_array_elements_text将JSONB数组拆解为包含子数组字符串的行- 把字符串转换为整数后,用
array_agg聚合为一维数组
方法三:自定义可复用函数
如果需要频繁处理嵌套数组,可以封装一个自定义函数:
CREATE OR REPLACE FUNCTION flatten_nested_array(arr anyarray) RETURNS anyarray AS $$ BEGIN RETURN array(SELECT unnest(unnest(arr))); END; $$ LANGUAGE plpgsql IMMUTABLE; -- 调用函数示例 SELECT flatten_nested_array(array[array[1, 2], array[3, 4]]);
这个函数可以接收任意类型的二维嵌套数组,返回对应的一维数组,方便重复调用。
内容的提问来源于stack exchange,提问作者baxx
相关产品推荐
相关产品推荐

