云数据库 GAUSSDB-数组类型:数组构造器
数组构造器
数组构造器是一个能构建数组值的表达式。简单的数组构造器由关键词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构造器的类型转换自动的应用到所有的内层构造器。
- GaussDB的研发历程_GaussDB产品动态_高斯数据库研发历程-华为云
- GaussDB版本_GaussDB数据库版本_高斯数据库版本-华为云
- GaussDB发展计划_GaussDB产品动态_高斯数据库发展计划-华为云
- GaussDB版本查询_华为云GaussDB的作用_高斯数据库版本查询_华为云
- 云数据库 RDS 的实例类型有哪些
- GaussDB数据库函数和字符串_高斯数据库优势_新建高斯数据库_高斯协议
- 云数据库 RDS 的实例存储类型有哪些
- 云数据库GaussDB(for MySQL)备份策略_备份类型_自动备份
- 云数据库 RDS for MySQL实例变更_MySQL实例如何变更_华为云
- GaussDB MPP_高斯数据库查看建表语句_高斯数据库 MPP_华为云