postgres array_to_string和array的用法说明

这篇文章主要介绍了postgres array_to_string和array的用法讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。
 
有三张表,分别如下:
 
1select * from vehicle
 
 
1select * from station
 
 
1select * from vehicle_station
 
 
需求:
 
vehicle和station表示多对多的关系,需要把vehicle表对应的station表的第二字段查出来放到一个字段,如果对应多条,用逗号隔开放到一个字段。
 
解决方案:
 
1SELECT v.*, array_to_string(ARRAY (SELECT station_name FROM station WHERE ID IN (SELECT station_id FROM vehicle_station WHERE vehicle_id = v. ID)),',') station_names FROM vehicle v
 
结果如下:
 
 
补充:Postgres array 数组类型详细使用
 
德哥这篇文章写的很不错,在相关函数部分,尤其是 array_upper,array_lower 部分,有我自己的一些解释。
 
ARRAY类型包含几个重要的特征
 
维度
 
也就是几维数组, 不管怎么赋值, ARRAY最终必须是个矩阵.
 
例1 :
 
ARRAY[1,2,3,4] 是一维数组,
 
ARRAY[[1,2],[3,4],[5,6]] 是二维数组
 
例2 :
 
ARRAY[['digoal','zhou'],['a','b',c']] 是错误的. 因为第二个维度中的第一个array有2个元素, 而第二个array有3个元素. 不是一个矩阵. 个数必须一致.
 
同时类型也必须一致
 
例3 :
 
ARRAY[['digoal','zhou'],[1,2]] 是错误的. 因为['digoal','zhou']是text[]类型, 而[1,2]是int[]类型.
 
元素
 
一维数组ARRAY[1,2,3,4] 中的4个元素分别是 1, 2, 3, 4. 这些int型的值.
 
二维数组ARRAY[[1,2],[3,4],[5,6]] 中的第一维度有3个元素是 ARRAY[1,2] , ARRAY[3,4] , ARRAY[5,6] 这些int[]类型的值. 第二个维度的第一个subscript的元素有两个, 分别是1,2 . 第二个subscript 分别是3,4. 第三个subscript分别是5,6.
 
元素之间的分隔符, 除了box类型是分号;, 其他类型的分隔符都是逗号,.
 
扩展性
 
一维数组可以扩展, 二维数组无法扩展.
 
subscript访问ARRAY中的元素需要提供subscript值. 默认是从1开始编号. 除非赋值的时候强制指定subscript
 
例1 :
 
ARRAY[[1,2],[3,4],[5,6]] as a
a[1][1] = 1;
a[1][2] = 2;
a[2][1] = 3;
a[2][2] = 4;
a[3][1] = 5;
a[3][2] = 6;
 
 
 
a第一个[]表示第一维度, 里面的数字代表第一维度中要访问的subscript,
 
a第二个[]表示第二维度, 里面的数字代表第二维度中要访问的subscript,
 
另外也可以访问ARRAY的slice.
 
例2 :
 
1a[1:2][1:1] = {{1},{3}}
 
第一个[]中的1表示低位subscript, 2表示高位subscript值.
 
第二个[]中左边的1表示低位subscript, 右边的1表示高位subscript值.
 
1a[2:3][1:2] = {{3,4},{5,6}}
 
分片的另一种写法, 只要其中的一个维度用了分片写法, 其他的维度如果没有使用分片写法, 默认视为高位
 
如a[2:3][2] 等同于 a[2:3][1:2]
 
接下来讲解一下ARRAY类型的几个常用函数 :
 
array_dims, 返回的是各个维度中的低位subscript和高位subscript, 如下 :
 
digoal=> select array_dims(ARRAY[[1,2,3,4,5],[6,7,8,9,10]]);
 array_dims
———+–
 [1:2][1:5]
 
 
 
array_length, 返回的是array中指定维度的长度或元素个数, 如下 :
 
digoal=> select array_length(ARRAY[[1,2,3,4,5],[6,7,8,9,10]], 1);
 array_length
——-+——
      2
digoal=> select array_length(ARRAY[[1,2,3,4,5],[6,7,8,9,10]], 2);
 array_length
——–+—–
      5
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章