PostgreSQL:检索多个数组元素

时间:2018-10-21 16:10:27

标签: arrays postgresql

假设我们有一个查询,例如:

SELECT regexp_split_to_array('foo,bar', ',');

结果:

+-----------------------+
| regexp_split_to_array |
+-----------------------+
| {foo,bar}             |
+-----------------------+
(1 row)

要访问数组的单个元素,我们可以使用如下代码:

SELECT (regexp_split_to_array('foo,bar', ','))[1];

哪个会返回:

+-----------------------+
| regexp_split_to_array |
+-----------------------+
| foo                   |
+-----------------------+
(1 row)

或使用像这样的切片:

SELECT (regexp_split_to_array('foo,bar', ','))[2:];

结果:

+-----------------------+
| regexp_split_to_array |
+-----------------------+
| {bar}                 |
+-----------------------+
(1 row)

但是,当我尝试一次访问2个元素时,例如:

SELECT (regexp_split_to_array('foo,bar', ','))[1,2];

SELECT (regexp_split_to_array('foo,bar', ','))[1][2];

或任何其他语法,我收到一个错误:

ERROR:  syntax error at or near ","

是否可以在PostgreSQL中检索数组的两个不同且不相邻的元素?

2 个答案:

答案 0 :(得分:2)

通过数组中的选择提取多个元素应该意味着您可以将它们作为多列返回,也可以将所有这些元素作为单个数组的一部分返回。

这将返回一列作为两个元素的数组。

knayak=# select ARRAY[arr[1],arr[2]] FROM regexp_split_to_array('foo,bar', ',') as arr;
   array
-----------
 {foo,bar}
(1 row)

..这简单地为您提供了两个元素作为列。

knayak=# select arr[1],arr[2] FROM regexp_split_to_array('foo,bar', ',') as arr;
 arr | arr
-----+-----
 foo | bar
(1 row)

答案 1 :(得分:0)

数组索引器中的冒号':'确实允许您从头开始访问多个元素。

select (array[1,2,3,4,5])[2:4]

返回

{2,3,4}

这将在上面的示例中起作用,但是如果1和2彼此不相邻,则无效。如果是这样,@ KaushikNayak的建议是我唯一想到的方法。

使用您的示例:

SELECT (regexp_split_to_array('foo,bar', ','))[1:2]