postgresql数组类型

 作者:瀚高PG实验室 (Highgo PG Lab)

postgresql支持数组类型,可以是基本类型,也可以是用户自定义的类型。postgresql数组下标从1开始,既可以指定长度,也可以不指定长度。且postgresql既支持一维数组,也支持多维数组。

使用array构建数组类型

highgo=# select array[1,2,3,4];

   array

-----------

 {1,2,3,4}

(1 行记录)

highgo=# select array[[1,2],[3,4]];

     array

---------------

 {{1,2},{3,4}}

(1 行记录)

创建包含数组类型字段的表,其中int[]表示不限制数组长度,设定数组长度的方式:int[4]

highgo=# create table arraytest(inttype int,intshuzu int[],varshuzu varchar(32)[][]);

CREATE TABLE

highgo=# INSERT into arraytest(inttype,intshuzu,varshuzu) values (1,array[1,2],array[['a','b'],['c','d']]),(2,array[3,4,5],array[['a','b','c','h'],['d','e','f','g']]);

INSERT 0 2

查询数组类型字段内容

highgo=# select * from arraytest;

 inttype | intshuzu |       varshuzu

---------+----------+-----------------------

       1 | {1,2}    | {{a,b},{c,d}}

       2 | {3,4,5}  | {{a,b,c,h},{d,e,f,g}}

(2 行记录)

--查询数组类型字段时,查询维度要与数组维度对应否则查询不到相关内容

highgo=# select intshuzu[1],varshuzu[1] from arraytest;

 intshuzu | varshuzu

----------+----------

        1 |

        3 |

(2 行记录)

highgo=# select intshuzu[2],varshuzu[1][2] from arraytest;

 intshuzu | varshuzu

----------+----------

        2 | b

        4 | b

(2 行记录)

highgo=# select intshuzu[2],varshuzu[1][3] from arraytest;

 intshuzu | varshuzu

----------+----------

        2 |

        4 | c

(2 行记录)

highgo=# select intshuzu[2],varshuzu[2][1] from arraytest;

 intshuzu | varshuzu

----------+----------

        2 | c

        4 | d

(2 行记录)

--非数组类型字段不能使用数组类型查询方式查询

highgo=# select inttype[1],intshuzu[1],varshuzu[1] from arraytest;

错误:  42804: 无法下标类型 integer, 因为它不是一个数组

--使用数组下标查询数组中连续的元素

highgo=# select intshuzu[1:2],varshuzu[1:2][1:3] from arraytest;

 intshuzu |     varshuzu

----------+-------------------

 {1,2}    | {{a,b},{c,d}}

 {3,4}    | {{a,b,c},{d,e,f}}

(2 行记录)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值