Вы можете использовать «flatten» для выделения значений из массива, а затем «table» для преобразования значений в таблицу:
-- Use an array for testing:
select array_construct(1, 2, 3, 4, 5);
-- Flattens into a table with metadata for each row:
select * from table(flatten(input => array_construct(1, 2, 3, 4, 5)));
--Pulls out just the values from the array:
select value::integer from table(flatten(input => array_construct(1, 2, 3, 4, 5)));
Часть "::integer"
приводит значения к данным Тип вы хотите из массива. Это необязательно, но рекомендуется.
Вы можете приблизить синтаксис unnest, создав пользовательскую табличную функцию:
create or replace function UNNEST(V array)
returns table ("VALUE" variant)
language SQL
aS
$$
select VALUE from table(flatten(input => V))
$$;
Вы бы назвали ее так:
select * from table(unnest(array_construct(1, 2, 3, 4, 5)));
Это возвращает таблицу с одним столбцом с именем VALUE типа варианта. Вы можете создать версию, которая возвращает строки, целые числа и т. Д. c.