postgresql数组类型

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 行记录)

 

 

 

 

 

你可能感兴趣的:(PostgreSQL,Highgo,DB)