PostgreSQL Documentation on arrays提供了一个使用[-1]
访问数组最后一个元素的示例;然而,当SELECT arr[2:3];
产生{5,9}
时,arr[2:-1]
产生{}
。
如何在PostgreSQL中获得数组的最后一个元素?
编辑:Windows,PostgreSQL v9.2.1
PostgreSQL Documentation on arrays提供了一个使用[-1]
访问数组最后一个元素的示例;然而,当SELECT arr[2:3];
产生{5,9}
时,arr[2:-1]
产生{}
。
如何在PostgreSQL中获得数组的最后一个元素?
编辑:Windows,PostgreSQL v9.2.1
4条答案
按热度按时间umuewwlo1#
对于任何数组“arr”,要获取数组arr的最后一个元素,请使用
gcxthw6b2#
我认为你误解了这个例子。PostgreSQL数组不必从1到
n
进行索引,这只是默认值:默认情况下,PostgreSQL对数组使用基于1的编号约定,即***n***个元素的数组以
array[1]
开始,以array[n]
结束。你看到的例子是这样的:
但是这些负数并不像Perl这样的语言那样从数组的末尾开始索引。在
FROM (SELECT ...
部分,它们指定了开始和结束索引,因此f1[1][-1][5]
中的-1只是一个普通的旧索引。考虑以下array_dims
结果:如果你使用默认的基于1的数组,那么你可以用一个简单的
arr[array_length(arr, 1)]
来获取最后一个元素。如果您没有使用默认的[1:n]
数组,那么您将不得不使用array_lower
和array_upper
来获取第一个和最后一个元素;或者,根据具体情况,您可以使用unnest
解包数组,然后将数组作为行集使用。bt1cpqcv3#
如果有人使用Postgre 9.5,documentation说:
-> int
获取JSON数组元素(从零开始索引,负整数从末尾开始计数)
这对我来说很有效:
yhived7q4#
我有一个我不喜欢的案例:
所以,另一个选择是使用
UNNEST .. WITH ORDINALITY
:制作:
当然,假设没有对
WITH ORDINALITY
和LIMIT 1
的组合进行巧妙的优化,在最坏的情况下,这将找到O(N log N)
中的最后一个数组元素(由于排序),而不是O(1)
,但有时,数组足够小,有时,没有任何其他方法。