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

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

编辑:Windows,PostgreSQL v9.2.1

推荐答案

我认为你误解了这个例子.PostgreSQL数组不必在1到nthat's just the default之间建立索引:

默认情况下,PostgreSQL对数组使用基于一的编号约定,即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 ...部分中,他们指定了起始索引和结束索引,因此f1[1][-1][5]中的-1只是一个普通的旧索引.考虑这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_lowerarray_upper来获得第一个和最后一个元素;或者,根据具体情况,您可能可以使用unnest解包数组,然后将数组作为行集使用.

Postgresql相关问答推荐

无法在timscaleDb中创建Hypertable

在Go中从Kafka读取并写入PostgreSQL时如何处理错误?

对表执行 DISABLE TRIGGER ALL 是否也会禁用 FK 指向该表?

在特定距离内创建点的唯一索引

gitlab在ubuntu上安装duplicate schema问题

带有附加组的时间刻度 interpolated_average

在 SQL 上返回负值

订阅标签保存在哪个表中?

为什么这里的默认格式不同? (ISO 8601 的两种不同实现)

Regexp_replace 行为会改变,如果它用空白字符串或 null 替换字符串数组中的字符串

pgadmin db 限制服务器属性不起作用

在 CentOS 上安装 psycopg2 时遇到问题

SELECT INTO 具有多个归因

整数除法返回 0

如何防止materialized 视图在 pg_restore 期间刷新?

是否可以在 PostgreSQL 中部分刷新materialized视图?

Postgres 外键on update和on delete选项如何工作?

如何使 array_agg() 像 mySQL 中的 group_concat() 一样工作

Postgresql:备份所有表 struct ,但只备份少数数据表

psql 将默认 statement_timeout 设置为 postgres 中的用户