array_upper和array_length之间有功能上的区别吗?

时间:2019-07-23 20:37:15

标签: arrays postgresql

这两个数组函数的postgres文档非常薄弱。

我已经用几种不同的方式尝试了这两个函数,它们似乎返回相同的结果。

SELECT array_length(array[[1, 2], [3, 4], [5, 6]], 1);
SELECT array_upper(array[[1, 2], [3, 4], [5, 6]], 1);

SELECT array_length(array[[1, 2], [3, 4], [5, 6]], 2);
SELECT array_upper(array[[1, 2], [3, 4], [5, 6]], 2);

1 个答案:

答案 0 :(得分:2)

是的,有区别。 PostgreSQL数组下标默认默认为1,但they don't have to

  

默认情况下,PostgreSQL对数组使用基于一个编号的约定,即n元素的数组以array[1]开始,以array[n]结尾。
  [...]
  下标分配允许创建不使用基于一的下标的数组。例如,可能分配给myarray[-2:7]来创建一个数组,并使用-2 to 7中的下标值。
  [...]
  默认情况下,数组维的下界索引值设置为1。为了表示具有其他下限的数组,可以在写入数组内容之前显式指定数组下标范围。

通常,您需要使用array_lower and array_upper而不是假设数组将从1开始到array_length(a, n)结束。