如何在PostgreSQL中获取数组的最后一个元素?

时间:2012-10-07 03:42:31

标签: arrays postgresql indexing

PostgreSQL Documentation on arrays提供了一个使用[-1]来访问似乎是数组最后一个元素的示例;然而,当SELECT arr[2:3];生成{5,9}时,arr[2:-1]会生成{}

如何在PostgreSQL中获取数组的最后一个元素?

编辑:Windows,PostgreSQL v9.2.1

3 个答案:

答案 0 :(得分:18)

对于任何数组“arr”,要获取数组的最后一个元素arr,请使用

SELECT arr[array_upper(arr, 1)];

答案 1 :(得分:17)

我认为你错误地解释了这个例子。 PostgreSQL数组不必从1到nthat'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_lowerarray_upper来获取第一个和最后一个元素;或者,根据具体情况,您可以使用unnest解压缩数组,然后将数组作为行集使用。

答案 2 :(得分:0)

如果有人使用Postgre 9.5,则documentation会说:

-> int

获取JSON数组元素(从零开始索引,从末数开始为负整数)

所以这对我有用:

arr->-1