关于数组的PostgreSQL 文档提供了一个示例,[-1]
用于访问似乎是数组的最后一个元素;然而,虽然SELECT arr[2:3];
产生{5,9}
,arr[2:-1]
结果{}
。
在PostgreSQL中如何获取数组的最后一个元素?
编辑:Windows,PostgreSQL v9.2.1
关于数组的PostgreSQL 文档提供了一个示例,[-1]
用于访问似乎是数组的最后一个元素;然而,虽然SELECT arr[2:3];
产生{5,9}
,arr[2:-1]
结果{}
。
在PostgreSQL中如何获取数组的最后一个元素?
编辑:Windows,PostgreSQL v9.2.1
对于任何数组“arr”,要获取数组 arr 的最后一个元素,请使用
SELECT arr[array_upper(arr, 1)];
我认为你误解了这个例子。PostgreSQL 数组不必从 1 索引到n
,这只是默认值:
默认情况下,PostgreSQL 对数组使用从 1 开始的编号约定,即一个包含n 个元素的数组以 . 开头
array[1]
和结尾array[n]
。
您正在查看的示例是这样的:
SELECT f1[1][-2][3] AS e1, f1[1][-1][5] AS e2
FROM (SELECT '[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[] AS f1) AS ss;
但是这些负数不像在 Perl 等语言中那样从数组的末尾开始索引。在该FROM (SELECT ...
部分中,他们指定了开始和结束索引,因此 -1 inf1[1][-1][5]
只是一个普通的旧索引。考虑这个array_dims
结果:
=> SELECT array_dims('[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[]);
array_dims
-------------------
[1:1][-2:-1][3:5]
如果您使用默认的基于 1 的数组,那么您可以使用简单的arr[array_length(arr, 1)]
. 如果您不使用默认[1:n]
数组,那么您将不得不弄乱array_lower
并array_upper
获取第一个和最后一个元素;或者,根据具体情况,您可以使用unnest
解包数组,然后将数组作为行集使用。