我完全不知道SQL数组索引做什么,索引返回类型[]应该是什么。
我有一个3,2数组:

select ARRAY[
   [1,1],
   [2,2],
   [3,3]];

--> {{1,1},{2,2},{3,3}}

(顺便说一下,pgadmin3说这是一个“array integer[]”,而不是“array integer[]”)。
假设我想提取第一行(索引从1开始,对吗?):
-- A
select (ARRAY[
   [1,1],
   [2,2],
   [3,3]])[1];
--> NULL

呵呵?为什么不{1,1}(属于int[]类型)。
-- B
select (ARRAY[
   [1,1],
   [2,2],
   [3,3]])[1][:];

--> {{1,1}}

... 似乎合法。但是:
-- C
select (ARRAY[
   [1,1],
   [2,2],
   [3,3]])[1][:][1];
--> {}

为什么这和A不同?
如何从int[][(1d数组)中提取行作为int[](1d数组)。

最佳答案

如何在postgres中将int[][]中的行提取为int[]
通过聚集不受尊重的元素:

select array_agg(elem)
from unnest(array[[1,1],[2,2],[3,3]]) elem;

   array_agg
---------------
 {1,1,2,2,3,3}
(1 row)

你可以在这篇文章中找到更多信息:How to get the dimensionality of an ARRAY column?
如果要获取第二个子阵列:
with my_data(id, arr) as (
values
(1, array[
   [1,1],
   [2,2],
   [3,3]]),
(2, array[
   [1,1,11],
   [2,2,22],
   [3,3,33]])
)

select array_agg(elem)
from my_data,
unnest(arr[2:2]) elem
group by id;

 array_agg
-----------
 {2,2}
 {2,2,22}
(2 rows)

注1。符号[2:2]表示从第二个元素到第二个元素的切片,因此它指向第二个子数组。
注2。多维数组必须具有具有匹配维度的数组表达式。

10-05 20:47
查看更多