postgresql 数组类型

时间:2022-05-14
本文章向大家介绍postgresql 数组类型,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

数组类型

create table test_arr(id int,arr_people test[],arr_classid int[]);

insert into test_arr values(1,array['a','b','c','d','e'],array[1,2,3,4,5]);
INSERT 0 1
mydb=> 
mydb=> select * from test_arr;
 id | arr_people  | arr_classid 
----+-------------+-------------
  1 | {a,b,c,d,e} | {1,2,3,4,5}
  
select  arr_people[2],arr_classid[5] from test_arr;
arr_people | arr_classid 
------------+-------------
 b          |           5
(1 row)

或者

insert into test_arr values(2,'{"f","g","h","i","j"}','{6,7,8,9,10}');
INSERT 0 1
mydb=> select * from test_arr;
 id | arr_people  | arr_classid  
----+-------------+--------------
  1 | {a,b,c,d,e} | {1,2,3,4,5}
  2 | {f,g,h,i,j} | {6,7,8,9,10}

3.1 元素末尾增加
array_append(array,array_element);
向数组末尾添加一个元素
select array_append(array[1,2,3,4],4);
示例:
array_append函数
向id=1的arr_people数组中结尾添加元素aa

mydb=> update test_arr set arr_people=array_append(arr_people,'aa') where id=1;
UPDATE 1

mydb=> select * from test_arr;
 id |   arr_people   | arr_classid  
----+----------------+--------------
  2 | {f,g,h,i,j}    | {6,7,8,9,10}
  1 | {a,b,c,d,e,aa} | {1,2,3,4,5}
(2 rows)

删除:

3.1 数组的增删改查
删:array_remove函数

mydb=> select * from test_arr;
 id |       arr_people        | arr_classid  
----+-------------------------+--------------
  2 | {f,g,h,i,j}             | {6,7,8,9,10}
  1 | {a,b,c,d,e,aaa,abc,edf} | {1,2,3,4,5}
(2 rows)

mydb=> update test_arr set arr_people = array_remove(arr_people, 'aaa') where id = 1;
UPDATE 1
mydb=> select * from test_arr;
 id |     arr_people      | arr_classid  
----+---------------------+--------------
  2 | {f,g,h,i,j}         | {6,7,8,9,10}
  1 | {a,b,c,d,e,abc,edf} | {1,2,3,4,5}
(2 rows)

改:用如下函数修改postgresql数组元素

array_preappend函数
向id=1的arr_people数组中头部添加元素aa,此处不演示了

array_cat函数
向id=1的arr_people数组中结尾添加多个元素,ABC,edf

update test_arr set arr_people = array_cat(arr_people, ARRAY['abc','edf']) where id = 1;
mydb=> update test_arr set arr_people = array_cat(arr_people, ARRAY['abc','edf']) where id = 1;
UPDATE 1
mydb=> select * from test_arr;
 id |       arr_people       | arr_classid  
----+------------------------+--------------
  2 | {f,g,h,i,j}            | {6,7,8,9,10}
  1 | {a,b,c,d,e,aa,abc,edf} | {1,2,3,4,5}

array_length 返回数据长度
array_length(anyarray, int)

返回数组指定维度的长度,维度数是有由第二个参数指定的

mydb=> select array_length(ARRAY[[1, 2],[3, 4],[5, 6]],2);
 array_length 
--------------
            2
(1 row)

mydb=>  select array_length(ARRAY[[1, 2],[3, 4],[5, 6]],1);
 array_length 
--------------
            3
(1 row)
 array_length 
--------------
            5
(1 row)

array_ndims 返回数组维度

select array_ndims(arr_classid) from test_arr where id=2;
mydb=> select array_ndims(arr_classid) from test_arr where id=2;
 array_ndims 
-------------
           1
(1 row)

array_position 返回某个元素第一次出现的位置

select array_position(arr_people,'aaa') from test_arr;

mydb=> select * from test_arr;
 id |       arr_people       | arr_classid  
----+------------------------+--------------
  2 | {f,g,h,i,j}            | {6,7,8,9,10}
  1 | {a,b,c,d,e,aa,abc,edf} | {1,2,3,4,5}
(2 rows)

mydb=> select *,array_position(arr_people,'aa') from test_arr;
 id |       arr_people       | arr_classid  | array_position 
----+------------------------+--------------+----------------
  2 | {f,g,h,i,j}            | {6,7,8,9,10} |               
  1 | {a,b,c,d,e,aa,abc,edf} | {1,2,3,4,5}  |              6
array_replace(c, a , b) 返回将数组c中的a替换为b

update test_arr set arr_people = array_replace(arr_people,'aa','aaa') where id = 1;

mydb=> update test_arr set arr_people = array_replace(arr_people,'aa','aaa') where id = 1;
UPDATE 1
mydb=> select * from test_arr;
 id |       arr_people        | arr_classid  
----+-------------------------+--------------
  2 | {f,g,h,i,j}             | {6,7,8,9,10}
  1 | {a,b,c,d,e,aaa,abc,edf} | {1,2,3,4,5}
(2 rows)

原文地址:https://www.cnblogs.com/nanblog/p/16269702.html