是否有任何簡單的方法將postgres錶轉換爲2維?postgres行到2維數組
我有兩列foo和bar數據表foobar的,其在 1,2 3,4 5,6
以下數據我想將它轉換成
{
{1,2},
{3,4},
{5,6}
}
我從foobar的試圖像
選擇ARRAY [富,巴]東西
這產生
{1,2}
{3,4}
{5,6}
這是近有
我懷疑,我將不得不寫pgpsql函數來做到這一點?有什麼建議麼?
是否有任何簡單的方法將postgres錶轉換爲2維?postgres行到2維數組
我有兩列foo和bar數據表foobar的,其在 1,2 3,4 5,6
以下數據我想將它轉換成
{
{1,2},
{3,4},
{5,6}
}
我從foobar的試圖像
選擇ARRAY [富,巴]東西
這產生
{1,2}
{3,4}
{5,6}
這是近有
我懷疑,我將不得不寫pgpsql函數來做到這一點?有什麼建議麼?
這裏就是我做了LedgerSMB:
CREATE AGGREGATE compound_array (
BASETYPE = ANYARRAY,
STYPE = ANYARRAY,
SFUNC = ARRAY_CAT,
INITCOND = '{}'
);
然後,您可以:
select compound_array(ARRAY[[foo,bar]]) from foobar;
注意,你需要有兩對括號的,否則它只是增加了他們的一維數組。
create or replace function my_array()
returns integer[] as $function$
declare
r record;
a integer[];
begin
for r in
select foo, bar
from (values
(1, 2), (3, 4), (5, 6)
) foobar (foo, bar)
loop
a := a || array[[r.foo, r.bar]];
end loop;
return a;
end;
$function$ language plpgsql;
select my_array();
my_array
---------------------
{{1,2},{3,4},{5,6}}
select (my_array())[2][2];
my_array
----------
4
更容易創建基於現有PostgreSQL功能的聚合;-) –
感謝您的答案,我想出了一個不同的解決方案 – Dave
從postgresql 9.5開始,你也可以用array_agg做到這一點。請參閱https://www.postgresql.org/docs/devel/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE –