заменить элементы в 2d массиве - PullRequest
0 голосов
/ 19 ноября 2018

Учитывая 2d массив

select (ARRAY[[1,2,3], [4,0,0], [7,8,9]]);

{{1,2,3},{4,0,0},{7,8,9}}

Есть ли способ заменить срез в [2:2][2:] ({{0,0}}) значениями 5 и 6? array_replace заменяет определенное значение, поэтому я не знаю, как к этому приблизиться.

1 Ответ

0 голосов
/ 20 ноября 2018

Я полагаю, что более читабельно кодировать функцию в plpgsql.Тем не менее, также существует чисто SQL-решение: select ( select array_agg(inner_array order by outer_index) from ( select outer_index, array_agg( case when outer_index = 2 and inner_index = 2 then 5 when outer_index = 2 and inner_index = 3 then 6 else item end order by inner_index ) inner_array from ( select item, 1 + (n - 1) % array_length(a, 1) inner_index, 1 + (n - 1) / array_length(a, 2) outer_index from unnest(a) with ordinality x (item, n) ) _ group by outer_index )_ ) from ( select (ARRAY[[1,2,3], [4,0,0], [7,8,9]]) a )_;

...