postgresql 提供了陣列型別。我來演示下如何具體使用。
建立乙個有陣列型別欄位的表。
create table test_array(id serial primary key, str1 int);
插入兩條測試資料。
insert into test_array values (1,array[[[1,2],[3,4],[5,6]],[[20,30],[40,50],[70,100]]]);
insert into test_array values (2,array[[[100,200],[300,400],[500,600]],[[2000,3000],[4000,5000],[7000,10000]]]);
為了能直觀的看到結果集,我們得把陣列的值換成普通的型別拿出來, 有以下幾種方法。
不帶分片的遍歷,
create or replace function sp_array2table_******(anyarray
)returns table (element int) as
$ytt$
declare array1 alias for $1;
x int;
begin
drop table if exists tmp_1;
create temporary table tmp_1 (id int);
<> foreach x in array array1
loop
insert into tmp_1 values (x);
end loop label1;
return query select * from tmp_1;
end;
$ytt$ language plpgsql;
t_girl=#select sp_array2table_******(str1) as array_list from test_array where id = 2;
array_list
------------
100200
300400
500600
2000
3000
4000
5000
7000
10000
(12 行記錄)
帶分片的遍歷:
create or replace function sp_array2table(anyarray
)returns table (element int) as
$ytt$
declare array1 alias for $1;
x int;
nlen int := 0;
i int := 1;
begin
drop table if exists tmp_1;
create temporary table tmp_1 (id int);
<> foreach x slice 1 in array array1
loop
nlen := array_length(x,1);
i := 1;
<> while i <= nlen loop
insert into tmp_1 values (x[i]);
i := i + 1;
end loop label2;
end loop label1;
return query select * from tmp_1;
end;
$ytt$ language plpgsql;
t_girl=#select sp_array2table(str1) as array_list from test_array where id = 2;
array_list
------------
100200
300400
500600
2000
3000
4000
5000
7000
10000
(12 行記錄)
還有就是系統系統了幾個函式,直接進行遍歷,
比如unnest
t_girl=#select unnest(str1) as array_list from test_array where id = 2;array_list
------------
100200
300400
500600
2000
3000
4000
5000
7000
10000
(12 行記錄)
比如array_to_string 等。
t_girl=#select regexp_split_to_table(array_to_string(str1,','),',+') as array_list from test_array where id = 2;array_list
------------
100200
300400
500600
2000
3000
4000
5000
7000
10000
(12 行記錄)
原創 PostgreSQL 對陣列的遍歷
postgresql 提供了陣列型別。我來演示下如何具體使用。建立乙個有陣列型別欄位的表。create table test array id serial primary key,str1 int 插入兩條測試資料。insert into test array values 1,array 1,2...
原創 PostgreSQL 實現階乘方法列舉
postgresql 功能龐大,對實現乘法這類運算有諸多的方法,今天我來簡單列舉下以下幾種便捷的途徑。比如我們要計算10!1 可以用sql給它展開 t girl select 1 2 3 4 5 6 7 8 9 10 as multiply 10 multiply 10 3628800 1 row ...
原創 PostgreSQL 實現階乘方法列舉
postgresql 功能龐大,對實現乘法這類運算有諸多的方法,今天我來簡單列舉下以下幾種便捷的途徑。比如我們要計算10!1 可以用sql給它展開 t girl select 1 2 3 4 5 6 7 8 9 10 as multiply 10 multiply 10 3628800 1 row ...