在阅读this之后,我写了一个天真的尝试来产生这个
col1
---------
1
4
7
来自这个
ARRAY[[1,2,3], [4,5,6], [7,8,9]]
这有效
SELECT unnest((ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:3][1:1]);
但在我的情况下,我不知道外部阵列的长度。
那么有没有办法将切片“字符串”拼凑在一起以考虑这种可变性?
这是我的尝试。我知道,这有点好笑
_ids := _ids_2D[('1:' || array_length(_ids_2D, 1)::text)::int][1:1];
如您所见,我只想创建[1:n]
的效果。显然'1:3'
不会很好地解析数组切片需要的内容。
我显然可以在上面链接的答案中使用unnest_2d_1d
Erwin提及的内容,但希望有更优雅的东西。
答案 0 :(得分:2)
如果您想在阵列(第一维)内获取所有嵌套(第二维)数组的第一个元素,那么您可以使用
array_upper(anyarray, 1)
获取特定维度的所有元素
anyarray[1:array_upper(anyarray, 1)][<dimension num>:<dimension num>]
例如,获取第一维的所有元素
anyarray[1:array_upper(anyarray, 1)][1:1]
如上面的代码所示。有关详细信息,请参阅Arrays上的PostgreSQL手册部分。