PostgreSQL数组类型的增、删、改、查详解


前言

PostgreSQL支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型、用户自定义的类型、枚举类型以及组合类型。
数组类型的定义就是通过在其基本类型后面附加中括号 [] 来实现的,中括号中可以给一个长度数字,也可以不给。

一、定义数组类型

首先我们先创建了t_test表,里面包含int类型的数组字段name和text类型的数组字段address,如下的代码片段。

create table t_test (
	id bigint,
	name integer[],
	address text[]
);

二、数组类型插入数据

方式1:使用{}将数据转为数组

insert into t_test(id,name,address) values(1,'{1,2}','{"beijing","shanghai"}');

方式2:使用array将数据转为数组

insert into t_test(id,name,address) values(2,array[1,2],array['beijing','shanghai']);

插入后的结果如下图。
在这里插入图片描述

三、数组类型修改数据

尾部追加数组元素:可以使用array_append函数或者使用||。

--使用||修改
update t_test set name = name||'{3}' , address = address||'{"shenzhen"}' where id=1;
--使用array_append函数修改
update t_test set name = array_append(name,3) , address = array_append(address,'shenzhen') where id=1;

头部追加数组元素:使用array_prepend函数

update t_test set name = array_prepend(3,name) , address = array_prepend('shenzhen',address) where id=2;

四、数组类型删除数据

通过数组类型删除整行数据。

--如果name数组的第二个元素为1,则删除整行数据
delete from t_test where name[2] = 1;

如果要删除数组中的某个元素,需要利用array_remove函数配合update语句实现,代码如下。

update t_test set name= array_remove(name,3) where id=2;

五、数组类型查询数据

查询数组中某个元素,例如查询address数组及address数组的第二个元素

select address,address[2] from t_test;

查询name数组中包含3元素的数据行

select * from t_test where array_position(name,3)>0;

六、数组类型操作符

以下操作符是用于数组间的处理或者判断。

操作符 描述 例子 结果
= 等于 ARRAY[1,2,3] = ARRAY[1,2,3] true
<> 不等于 ARRAY[1,2,3] <> ARRAY[1,2,4] true
< 小于 ARRAY[1,2,3] < ARRAY[1,2,4] true
> 大于 ARRAY[1,4,3] > ARRAY[1,2,4] true
<= 小于或等于 ARRAY[1,2,3] <= ARRAY[1,2,3] true
>= 大于或等于 ARRAY[1,4,3] >= ARRAY[1,4,3] true
@> 包含 ARRAY[1,4,3] @> ARRAY[3,1] true
<@ 被包含于 ARRAY[2,7] <@ ARRAY[1,7,4,2,6] true
&& 重叠(有共同元素) ARRAY[1,4,3] && ARRAY[2,1] true
|| 数组与数组连接 ARRAY[1,2,3] || ARRAY[4,5,6] {1,2,3,4,5,6}

七、数组类型常用函数

函数 说明 语句 结果
array_append 向数组的末尾添加元素 array_append(ARRAY[1,2], 3) {1,2,3}
array_prepend 向数组的开头添加函数 array_prepend(1, ARRAY[2,3]) {1,2,3}
array_cat 连接两个数组 array_cat(ARRAY[1,2,3], ARRAY[4,5]) {1,2,3,4,5}
array_replace 用新值替换每个等于给定值的数组元素 array_replace(ARRAY[1,2,5,4], 5, 3) {1,2,3,4}
array_remove 删除某个给定值的数组元素 array_remove(ARRAY[1,2,3,4],4) {1,2,3}
[start:end] 通过下标范围数组元素 select (ARRAY[‘a’,‘b’,‘c’,‘d’])[1:2] {a,b}
array_position 数组中指定元素出现的位置 array_position(ARRAY[1,8,3,7], 8) 2
array_dims 返回数组维数的文本表示 array_dims(ARRAY[[1,2,3], [4,5,6]]) [1:2][1:3]
array_lower 返回数组维数的下界 array_lower(ARRAY[1,2,3,4], 1) 1
array_upper 返回数组维数的上界 array_upper(ARRAY[1,2,3,4], 1) 4
array_ndims 返回数组的维数 array_ndims(ARRAY[[1,2,3], [4,5,6]]) 2
array_length 返回数组维度的长度 array_length(array[1,2,3], 1) 3
cardinality 返回数组中的总元素数量,如果数组是空的则为0 cardinality(ARRAY[1,2,3,5]) 4
array_to_string 将数组转换为字符串,使用分隔符连接数组元素 select array_to_string(ARRAY[1, 2, 3], ‘,’) 1,2,3
string_to_array 使用指定的分隔符把字符串分隔成数组元素 select string_to_array(‘a,b,c’,‘,’) {a,b,c}
array_agg 把多个值合并到一个数组中 SELECT id, array_agg(label) FROM t_label group by id {label1,label2}
unnest 分解一个数组为一组行 select unnest(ARRAY[1,2,3]) 1
2
3

猜你喜欢

转载自blog.csdn.net/ma286388309/article/details/129884297