如何 select 数组的每个值

How to select each value of array

考虑以下案例

Table : tab1
id    serial      primary key
arr   int[]

现在我想 select 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

为此使用 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;

我不知道我身体好不好,但这里有你需要的一切

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