PostgreSQL如何对jsonb类型字段内的数组元素进行排序
PostgreSQL jsonb数组升序排序方案
你直接对jsonb类型的数组调用原生sort函数无效,是因为该函数仅支持PostgreSQL原生数组类型,不直接处理jsonb数组。你可以通过拆分数组->排序元素->重新聚合的逻辑实现需求:
SELECT ( SELECT jsonb_agg(elem::integer ORDER BY elem::integer) FROM jsonb_array_elements_text(Data -> 'SrcRcs') AS elem ) AS sorted_SrcRcs FROM table_name;
如果需要同时查询表内其他字段,直接在SELECT后加对应字段即可:
SELECT id, -- 替换为你需要查询的其他字段 ( SELECT jsonb_agg(elem::integer ORDER BY elem::integer) FROM jsonb_array_elements_text(Data -> 'SrcRcs') AS elem ) AS sorted_SrcRcs FROM table_name;
逻辑说明
jsonb_array_elements_text()函数会将当前行的jsonb数组拆分为多行文本格式的单个元素- 元素转换为integer类型后按升序排序,再通过
jsonb_agg()聚合为新的jsonb数组,即可得到排序后的结果 - 如果你需要返回PostgreSQL原生整数数组而非jsonb数组,将
jsonb_agg替换为array_agg即可
注意事项
请确保SrcRcs数组内所有元素均为整数类型,否则elem::integer转换步骤会触发报错。
内容的提问来源于stack exchange,提问作者S.DILIP Kumar
相关产品推荐
相关产品推荐

