PostgreSQL中矩阵无法提取单个数组?行为是否正常及实现方法咨询
PostgreSQL二维数组提取单行的问题
行为是否符合预期?
是的,你遇到的情况完全符合PostgreSQL的数组索引规则。PostgreSQL的多维数组要求索引时必须明确指定每个维度的位置或范围,仅使用单个维度索引(比如matrix[2])并不是正确的二维数组行提取语法,因此返回空结果是预期行为。
而使用matrix[2:2]得到{{4,5,6}}格式也正常,因为这个切片操作返回的是仅包含目标行的二维数组,而非你想要的一维数组。
如何获取一维数组格式的结果?
这里有几种简单有效的方法得到{4,5,6}格式的目标结果:
方法1:指定第二维度的完整范围
使用matrix[2][:]直接提取第二行的一维数组,[:]表示取该维度的所有元素,无需手动指定长度,适配任意列数的二维数组:
WITH matrix_test AS ( SELECT '{{1,2,3},{4,5,6},{7,8,9}}'::integer[][] AS matrix ) SELECT matrix[2][:] AS second_line FROM matrix_test;
方法2:从二维切片中提取一维数组
既然matrix[2:2]返回的是{{4,5,6}}(二维数组),你可以再对这个二维数组取第一个元素,得到一维数组:
WITH matrix_test AS ( SELECT '{{1,2,3},{4,5,6},{7,8,9}}'::integer[][] AS matrix ) SELECT (matrix[2:2])[1] AS second_line FROM matrix_test;
方法3:用unnest+array_agg转换
如果需要更灵活的元素处理,可以先把目标行的元素拆出来,再重新聚合成一维数组:
WITH matrix_test AS ( SELECT '{{1,2,3},{4,5,6},{7,8,9}}'::integer[][] AS matrix ) SELECT array_agg(elem) AS second_line FROM matrix_test, unnest(matrix[2:2]) AS elem;
内容的提问来源于stack exchange,提问作者excitedGoose
相关产品推荐
相关产品推荐

