云数据库 GAUSSDB-数组类型:数组构造器

时间:2024-11-12 09:17:48

数组构造器

数组构造器是一个能构建数组值的表达式。简单的数组构造器由关键词ARRAY、“[”、用于数组元素值的表达式列表(用逗号分隔)以及最后的“]”组成。示例如下:

gaussdb=# SELECT ARRAY[1, 2, 3 + 4];
  array  
---------
 {1,2,7}
(1 row)

默认情况下,数组的元素类型是成员表达式的公共类型,使用和UNION或CASE结构(UNION,CASE和相关构造)相同的规则决定。可以通过显式类型转换将数组构造为想要的数据类型,示例如下:

gaussdb=# SELECT ARRAY[1, 2, 3]::varchar[];
  array  
---------
 {1,2,3}
(1 row)

gaussdb=# SELECT ARRAY['a', 'b', 'c'];
  array  
---------
 {a,b,c}
(1 row)

gaussdb=# SELECT ARRAY['a', 'b', 'c']::int[];
ERROR:  invalid input syntax for integer: "a"
LINE 1: select ARRAY['a', 'b', 'c']::int[];
                     ^
CONTEXT:  referenced column: array

gaussdb=# SELECT ARRAY[1::int, 'b', 'c'];
ERROR:  invalid input syntax for integer: "b"
LINE 1: select ARRAY[1::int, 'b', 'c'];
                             ^
CONTEXT:  referenced column: array

除预置的基础类型外,record类型和表类型也可以定义其数组类型,示例:

gaussdb=# CREATE TYPE rec IS (c1 int, c2 int);
gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::rec[];
       array       
-------------------
 {"(1,1)","(2,2)"}
(1 row)

gaussdb=# CREATE TABLE tab (c1 int, c2 int);
gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::tab[];
       array       
-------------------
 {"(1,1)","(2,2)"}
(1 row)

gaussdb=# DROP TYPE rec;
gaussdb=# DROP TABLE tab;

因为数组必须得有类型,因此在构造一个空数组时,必须明确的将其构造成需要的类型,示例:

gaussdb=# SELECT ARRAY[]::int[];
 array 
-------
 {}
(1 row)

我也可以从子查询的结果中构造一个数组。此时, 数组构造器是关键字ARRAY后跟着用圆括号括起来的子查询,子查询必须只返回一个单独的字段。生成的一维数组将为子查询里每行结果生成一个元素, 元素类型匹配子查询的输出字段。示例:

gaussdb=# SELECT ARRAY(select generate_series(1, 6));
     array     
---------------
 {1,2,3,4,5,6}
(1 row)

多维数组值可以通过嵌套数组构造器的方法来制作。内层构造器中的ARRAY关键字可以省略。比如,下面两个示例是同样的结果:

gaussdb=# SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]];
     array     
---------------
 {{1,2},{3,4}}
(1 row)

gaussdb=# SELECT ARRAY[[1,2], [3,4]];
     array     
---------------
 {{1,2},{3,4}}
(1 row)
  • 同层的内层构造器必须生成同维的子数组。
  • 任何应用于外层ARRAY构造器的类型转换自动的应用到所有的内层构造器。
support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-12-0334.html