Postgresql:数组的动态切片表示法

时间:2015-02-23 15:58:25

标签: arrays postgresql

在阅读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提及的内容,但希望有更优雅的东西。

1 个答案:

答案 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手册部分。