原創 PostgreSQL 對陣列的遍歷

2021-09-03 05:52:38 字數 2898 閱讀 7398

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 ...