PostgreSQL: получение нескольких элементов массива - PullRequest
0 голосов
/ 21 октября 2018

Допустим, у нас есть запрос вроде:

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 голосов
/ 21 октября 2018

Двоеточие ':' в индексаторе массива позволяет вам обращаться к нескольким элементам как от-до.

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

возвращает

{2,3,4}

Это будет работать в вашем примеревыше, но не если 1 и 2 не были рядом друг с другом.Если это так, то предложение @KaushikNayak - единственный способ, о котором я могу подумать.

Используя ваш пример:

SELECT (regexp_split_to_array('foo,bar', ','))[1:2]
0 голосов
/ 21 октября 2018

Извлечение нескольких элементов с помощью выбора из массива должно означать, что они могут быть возвращены как несколько столбцов, или все эти элементы являются частью одного массива.

Возвращает один столбец как массив из двухэлементы.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...