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

pos*_*est 0 arrays postgresql

读完这篇文章后,我写了一个天真的尝试来制作这个

col1
---------
1
4
7
Run Code Online (Sandbox Code Playgroud)

由此

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上面链接的答案中欧文提到的东西,但希望有更优雅的东西。

小智 5

如果您试图获取数组(第一维)内所有嵌套(第二维)数组的第一个元素,那么您可以使用

array_upper(anyarray, 1)
Run Code Online (Sandbox Code Playgroud)

获取特定维度的所有元素

anyarray[1:array_upper(anyarray, 1)][<dimension num>:<dimension num>]
Run Code Online (Sandbox Code Playgroud)

例如,获取第一维的所有元素

anyarray[1:array_upper(anyarray, 1)][1:1]
Run Code Online (Sandbox Code Playgroud)

如上面的代码所示。请参阅 PostgreSQL 手册中有关数组的部分以获取更多信息。