postgresql array 数据类型

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

--最近在给公司开发部门培训一些pg的知识,现总结如下:


--创建一维,二维,三维数组
create table t1 (id int[]);
insert into t1 values('{1,2,3}'::int[]);
select * from t1;
create table t2 (id int[][]);
insert into t2 values('{{123,123,12},{12,23,41}}'::int[][]);
select * from t2;
create table t3 (id int[][][]);
insert into t3 values(array[[[123,123,12],[12,23,41]]]);
----注意多维数组必须匹配每个维的元素数。如果不匹配则导致错误发生
insert into t3 values(array[[[123,123,12],[12,23,41]],[[12,123,123],[123,12,121]]]);
select * from t3;



--数组运算中的一些比较符
运算符                  描述
a = b                   立方体a和b是相同的
a && b                  立方体a和b重叠
a @> b                  立方体a包含立方体b
a <@ b                  立方体a被包含在立方体b中
[a, b] < [c, d]         小于
[a, b] > [c, d]         大于

postgres=# select array[1,2,3],array[2,3,4];
  array  |  array  
---------+---------
 {1,2,3} | {2,3,4}
--两个群组中是否有重叠 
postgres=# select array[1,2,3]&&array[2,3,4];
 ?column? 
----------
 t
--第一个数组是否包含第二个数组
postgres=# select array[1,2,3]@>array[2,3,4];
 ?column? 
----------
 f
 
postgres=# select array[1,2,3]@>array[2,3];  
 ?column? 
----------
 t
--第一个数组是否被第二个数组包含 
postgres=# select array[1,2,3]<@array[2,3];
 ?column? 
----------
 f
 
postgres=# select array[1,2,3]<@array[1,2,3,4];
 ?column? 
----------
 t
(1 row)


 --pg支持数组,且支持分片访问,比如[1:2],任意只有一个数字(没有冒号)的维数是从 1 开始到声明的数字为止的
 --如果任意维数被写为一个片段,也就是,包含一个冒号,那么所有维数都被当做是片段
If any dimension is written as a slice, i.e., contains a colon, then all dimensions are treated as slices. 
Any dimension that has only a single number (no colon) is treated as being from 1 to the number specified. 
For example, [2] is treated as [1:2], as in this example:

SELECT schedule[1:2][2] FROM sal_emp WHERE name = 'Bill';

--任何数组的当前维数都可以用 array_dims 函数检索:
SELECT array_dims(schedule) FROM sal_emp WHERE name = 'Carol';
array_dims
------------
[1:2][1:2]

--也可以用 array_upper 和 array_lower 函数分别返回数组特定维的上界和下界:
SELECT array_upper(schedule, 1) FROM sal_emp WHERE name = 'Carol'


--如果数组本身或任何下标表达式是 NULL ,那么该数组的下标表达式也将生NULL 。 从一个数组的当前范围之外抓取数据将生成一个 NULL ,而不是导致错误 


--array_length可用于返回指定维数的长充
SELECT array_length(schedule, 1) FROM sal_emp WHERE name = 'Carol';
array_length
--------------
2







 
 --将字符串切割成数据列
 SELECT regexp_split_to_table('kenyon,love,,china,!',',');
 
  --将字符串切割成数组
 SELECT regexp_split_to_array('kenyon,love,,china,!',',');
 
 --行值转换
 postgres=# select array_agg(id),string_agg(id::text,'#'),json_agg(id) from t2 where id<=10;           
      array_agg       |     string_agg     |           json_agg           
----------------------+--------------------+------------------------------
 {2,3,4,5,6,7,8,9,10} | 2#3#4#5#6#7#8#9#10 | [2, 3, 4, 5, 6, 7, 8, 9, 10]
 
 --将列值转化成行值
 select 'column',unnest(string_to_array('a,b,c',',')); 

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
3月前
|
XML JSON 关系型数据库
PostgreSQL支持多种数据类型
PostgreSQL支持多种数据类型
143 1
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
416 0
|
7月前
|
SQL 存储 Java
Hive 特殊的数据类型 Array、Map、Struct
在Hive中,`Array`、`Map`和`Struct`是三种特殊的数据类型。`Array`用于存储相同类型的列表,如`select array(1, &quot;1&quot;, 2, 3, 4, 5)`会产生一个整数数组。`Map`是键值对集合,键值类型需一致,如`select map(1, 2, 3, &quot;4&quot;)`会产生一个整数到整数的映射。`Struct`表示结构体,有固定数量和类型的字段,如`select struct(1, 2, 3, 4)`创建一个无名结构体。这些类型支持嵌套使用,允许更复杂的结构数据存储。例如,可以创建一个包含用户结构体的数组来存储多用户信息
569 0
|
存储 SQL HIVE
数据仓库的Hive的数据类型的复杂数据类型的array
在数据仓库领域,Hive是一个常用的工具。它提供了一种简单的方式来查询和分析大量数据.
189 0
|
XML SQL JSON
PostgreSQL 12 文档: 第 8 章 数据类型
PostgreSQL有着丰富的本地数据类型可用。用户可以使用CREATE TYPE命令为 PostgreSQL增加新的数据类型。
163 0
|
存储 JSON NoSQL
「Postgresql架构」使用PostgreSQL中的JSONB数据类型加快操作
「Postgresql架构」使用PostgreSQL中的JSONB数据类型加快操作
|
SQL 存储 移动开发
PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)|学习笔记
快速学习3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)
 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)|学习笔记
|
Java Go 索引
Go 编程 | 连载 10 - 复杂数据类型 Array
Go 编程 | 连载 10 - 复杂数据类型 Array
Go 编程 | 连载 10 - 复杂数据类型 Array
|
SQL 关系型数据库 数据库
3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)|学习笔记
快速学习3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)
|
存储 关系型数据库 数据库
PostgreSQL 数据类型
PostgreSQL 数据类型
134 0