PostgreSQL Documentation on arrays提供了一个使用[-1]
来访问似乎是数组最后一个元素的示例;然而,当SELECT arr[2:3];
生成{5,9}
时,arr[2:-1]
会生成{}
。
如何在PostgreSQL中获取数组的最后一个元素?
编辑:Windows,PostgreSQL v9.2.1
答案 0 :(得分:18)
对于任何数组“arr”,要获取数组的最后一个元素arr,请使用
SELECT arr[array_upper(arr, 1)];
答案 1 :(得分:17)
我认为你错误地解释了这个例子。 PostgreSQL数组不必从1到n
,that's just the default编入索引:
默认情况下,PostgreSQL对数组使用基于一的编号约定,即 n 元素的数组以
array[1]
开头,以{{结尾1}}。
您正在查看的示例是:
array[n]
但是这些负数并没有像在Perl这样的语言中从数组的末尾开始索引。在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;
部分中,它们指定了起始和结束索引,因此FROM (SELECT ...
中的-1只是一个普通的旧索引。考虑这个array_dims
结果:
f1[1][-1][5]
如果您使用默认的基于1的数组,那么您可以使用简单的=> SELECT array_dims('[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[]);
array_dims
-------------------
[1:1][-2:-1][3:5]
获取最后一个元素。如果您没有使用默认的arr[array_length(arr, 1)]
数组,那么您将不得不使用array_lower
和array_upper
来获取第一个和最后一个元素;或者,根据具体情况,您可以使用unnest
解压缩数组,然后将数组作为行集使用。
答案 2 :(得分:0)