数组上的PostgreSQL文档提供了一个[-1]
用于访问似乎是数组最后一个元素的示例; 然而,当SELECT arr[2:3];
产生{5,9}
,arr[2:-1]
结果{}
.
如何在PostgreSQL中获取数组的最后一个元素?
编辑:Windows,PostgreSQL v9.2.1
小智 24
对于任何数组"arr",要获取数组arr的最后一个元素
SELECT arr[array_upper(arr, 1)];
Run Code Online (Sandbox Code Playgroud)
mu *_*ort 18
我认为你错误地解释了这个例子.PostgreSQL数组不必从1索引n
,这只是默认值:
默认情况下,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;
Run Code Online (Sandbox Code Playgroud)
但是这些负数并没有像在Perl这样的语言中从数组的末尾开始索引.在该FROM (SELECT ...
部分中,它们指定了起始和结束索引,因此-1 in f1[1][-1][5]
只是一个普通的旧索引.考虑这个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]
Run Code Online (Sandbox Code Playgroud)
如果您使用默认的基于1的数组,那么您可以使用简单的方法获取最后一个元素arr[array_length(arr, 1)]
.如果你没有使用默认[1:n]
数组,那么你将不得不乱用array_lower
并array_upper
获得第一个和最后一个元素; 或者,根据具体情况,您可以使用unnest
解压缩数组,然后使用数组作为行集.
igo*_*rkf 11
如果有人使用 Postgre 9.5,文档说:
-> int
获取JSON数组元素(从零开始索引,负整数从末尾开始计数)
所以这对我有用:
to_json(arr)->-1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16177 次 |
最近记录: |