我认为你误解了这个例子。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 ...
部分,它们指定了起始和结束索引,因此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_lower
和
array_upper
进行操作,以获取第一个和最后一个元素;或者根据情况,您可能可以使用
unnest
将数组解包,然后将数组视为行集进行操作。
arr
是json
类型。对于PostgreSQL数组类型不起作用。 - Julian Mehnlearray_agg(id)
运行良好。 - Dorianarray_to_json(ARRAY(SELECT...))->-1
。 - TheAddonDepot