2015-12-09 6 views
2

Рассмотрим следующий случайКак выбрать каждое значение массива

Table : tab1 
id serial  primary key 
arr int[] 

Теперь я хочу, чтобы выбрать каждое значение arr.

SELECT * FROM (SELECT arr FROM tab1) AS tab2 

Мне нужна итерация в массиве.

например.

id arr 
----------------------------- 
1  [1,2] 
2  [5,6,8] 

Так что я мог бы получить результат, как

arr  val 
------------------------------- 
[1,2] 1 
[1,2] 2 
[5,6,8] 5 
[5,6,8] 6 
[5,6,8] 8 

ответ

1

Использование unnest() для этого:

WITH array_data(id,arr) AS (VALUES 
    (1,ARRAY[1,2]), 
    (2,ARRAY[5,6,8]) 
) 
SELECT arr,unnest(arr) AS val 
FROM array_data; 
0

Я не знаю, если у меня есть, но здесь у вас есть все, что вам нужно

select id, 
     unnest(arr), 
     array_to_string(arr,','), 
     array_length(arr, 1) 
from array_data;