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

Arrays 如何在PostgreSQL中获取数组的最后一个元素?,arrays,postgresql,indexing,Arrays,Postgresql,Indexing,提供了一个使用[-1]访问似乎是数组的最后一个元素的示例;然而,当选择arr[2:3];产生{5,9},arr[2:-1]产生{} 如何在PostgreSQL中获取数组的最后一个元素 编辑:Windows,PostgreSQL v9.2.1我认为您误解了示例。PostgreSQL数组不必从1到n进行索引: 默认情况下,PostgreSQL对数组使用基于一的编号约定,即n个元素的数组以数组[1]开始,以数组[n]结束 您看到的示例如下: SELECT f1[1][-2][3] AS e1, f1[

提供了一个使用[-1]访问似乎是数组的最后一个元素的示例;然而,当选择arr[2:3];产生{5,9},arr[2:-1]产生{}

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


编辑:Windows,PostgreSQL v9.2.1

我认为您误解了示例。PostgreSQL数组不必从1到n进行索引:

默认情况下,PostgreSQL对数组使用基于一的编号约定,即n个元素的数组以数组[1]开始,以数组[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等语言那样从数组末尾进行索引。在从中选择。。。部分原因是,它们指定了起始索引和结束索引,因此f1[1][1][5]中的-1只是一个普通的旧索引。考虑这一结果:


如果使用的是默认的基于1的数组,那么可以使用简单的arr[array_lengtharr,1]获取最后一个元素。如果您没有使用默认的[1:n]数组,那么您将不得不处理并获取第一个和最后一个元素;或者,根据具体情况,您可以使用来解包数组,然后将数组作为行集使用。

对于任何数组arr,可以使用来获取数组arr的最后一个元素

SELECT arr[array_upper(arr, 1)];

如果有人正在使用Postgre 9.5,则说明:

->int

获取从零开始索引的JSON数组元素,从末尾开始计算负整数

这对我来说很有用:

to_json(arr)->-1

这仅在arr是json类型时有效。这不适用于PostgreSQL数组类型。哦,好的。这一点很好,但仍可能有一些帮助
to_json(arr)->-1