Има няколко начина. Един от начините е да прехвърлите масива към текст и да го разделите с regexp_split_to_table ()
.
Тази функция присъства в PostgreSQL 8.3 или по-нова версия .
SELECT regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{');
Изход:
0,0,0
1,1,1
2,2,2
Ако искате ограждащите скоби (може би не искате?), добавете ги обратно по този начин:
SELECT '{' || regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{') || '}';
Изход:
{0,0,0}
{1,1,1}
{2,2,2}
Алтернатива:
Това трябва да работи и с PostgreSQL 8.2 или може би дори по-рано, но не съм го тествал.
SELECT my_2d_int_arr_var[x:x][1:3]
FROM (SELECT generate_series(1, array_upper(my_2d_intarr, 1), 1)::int4 AS x)) x
Изход:
{{0,0,0}}
{{1,1,1}}
{{2,2,2}}
(Може да искате да премахнете някои фигурни скоби ..)
В противен случай бих написал plpgsql функция, която преминава през масива. Доста лесно.
Има и свързаното unnest()
функция, но връща ред за основен елемент (цяло число в този случай), така че не е полезно тук.
Един (бърз!) начин за извеждане на резултата:COPY
.