数组类型
1.示例
select * from opt_visit ov; update opt_visit set label = '{抗菌药物, 抗菌药物输液, 国家基药}'::varchar[] select * from opt_visit where label @> '{国家基药, 抗菌药物}'::varchar[]
2.数组构造函数
(1).最基本的,简单的构造数组的方法
语法:select array [2001,2002] as arr;
运行结果:
(2).使用array()来生成数组 (数组元素存在与一个查询返回的结果集中)
语法:select array (select distinct label from opt_visit ov);
运行结果:
(3).将字符串转换成一个真正的数组
语法:select '{省基药,国家基药}'::varchar[] as name;
运行结果:
(4).用固定分隔符分割的字符串转换为数组
语法:select string_to_array('a.b.c.d','.') as arr;
运行结果:
(5).将一组任何类型的数据转换为数组:array_agg
语法:select array_agg(distinct label) from opt_visit ov;
运行结果:
(6).根据一维数组组建多维数组
语法:select array_agg(f.t) from (values ('{zhangsan,lisi}'::text[]),('{23,35}'::text[])) as f(t);
运行结果:
备注:被聚合的基础数组中元素类型必须相同,且基础数组的维度必须一样,即元素的个数()
3.将数组元素展开为记录行
(1).使用unnest函数将数组纵向展开
语法:select unnest('{a,b,c,d}'::text[]) as name;
运行结果:
(2).多个可对其数组的展开效果
语法:select unnest('{a,b,c,d}'::text[]),unnest('{1,2,3,4}'::text[]) as name;
运行结果:
4.数组的拆分与连接
(1).取数组中的某一部分元素:根据下标,下标从1开始
语法:select label[1:2] from opt_visit ov ;
运行结果:
(2).连接数组:|| 连接的类型需与数组中的类型一致
语法:select '{1,2,3,4}'::integer[] || 5 || 6;
运行结果:
select '{1,2,3,4}'::varchar[] || '{5}'::varchar[] || '{6}'::varchar[];
5.引用数组中的元素
(1).获取数组中的第一个元素与最后一个元素
语法:
select label[1] as start,label[array_upper(label,1)] as end from opt_visit ov ;
运行结果:
6.数组包含性检查
(1).&&:重叠判断运算符,如果两个数组由任何共同的元素则返回true,否则返回false
select label from opt_visit ov where label && '{LabelA}'::varchar[];
(2).@>:包含
select '{1,2,3}'::varchar[] @> '{2,3}'::varchar[];
(3).@<:被包含
select '{1,2,3}'::varchar[] <@ '{2,3}'::varchar[];