数组类型

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[];

 

posted @ 2020-10-16 15:16  pple  阅读(560)  评论(0编辑  收藏  举报
以终为始,你期待的那天不会太遥远。