我意识到在 PostgreSQL 的表中有两种指示数组的方法,但我无法弄清楚它们之间的区别是什么,或者是否有任何一种有任何优势。
好像有两种语法:
- {a,b,c,d,e}
- [0:4]={a,b,c,d,e}
例如:
CREATE TABLE table1
(id serial, arrayspalte smallint[], dt timestamp)
;
INSERT INTO table1
(id, arrayspalte, dt)
VALUES
(330, '[0:4]={12,14,27,45,50}', '2007-09-30 10:39:52'),
(331, '{2, 6,100,200,500,1000}', '2007-09-30 10:41:52')
;
都是一个数组,但是两者看起来很不一样。很明显,前者显示的是数组的维度,但两者之间有什么更大的区别吗?将两种类型放在同一张表中是否可以,否则会导致问题吗?
最佳答案
默认情况下数组下界为1:
select ('{12,14,27,45,50}'::int[])[5];
int4
------
50
您将下限更改为零:
select ('[0:4]={12,14,27,45,50}'::int[])[5];
int4
------
(1 row)
在您的示例中,不能在 [0]
处返回第二个数组的第一个元素
select
coalesce(a[0]::text, 'null'),
array_lower(a, 1),
array_upper(a, 1)
from (values
('[0:4]={12,14,27,45,50}'::int[]),
('{2, 6,100,200,500,1000}')
) s(a)
;
coalesce | array_lower | array_upper
----------+-------------+-------------
12 | 0 | 4
null | 1 | 6
关于sql - PostgreSQL 数组装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127980/