PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符

简介: 9.18. 数组函数和操作符 表 9.48显示了可以用于数组类型的操作符。 表 9.48. 数组操作符 操作符 描述 例子 结果 = 等于 ARRAY[1.1,2.1,3.

9.18. 数组函数和操作符

表 9.48显示了可以用于数组类型的操作符。

表 9.48. 数组操作符

操作符 描述 例子 结果
= 等于 ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] t
<> 不等于 ARRAY[1,2,3] <> ARRAY[1,2,4] t
< 小于 ARRAY[1,2,3] < ARRAY[1,2,4] t
> 大于 ARRAY[1,4,3] > ARRAY[1,2,4] t
<= 小于等于 ARRAY[1,2,3] <= ARRAY[1,2,3] t
>= 大于等于 ARRAY[1,4,3] >= ARRAY[1,4,3] t
@> 包含 ARRAY[1,4,3] @> ARRAY[3,1] t
<@ 被包含 ARRAY[2,7] <@ ARRAY[1,7,4,2,6] t
&& 重叠(具有公共元素) ARRAY[1,4,3] && ARRAY[2,1] t
|| 数组和数组串接 ARRAY[1,2,3] || ARRAY[4,5,6] {1,2,3,4,5,6}
|| 数组和数组串接 ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] {{1,2,3},{4,5,6},{7,8,9}}
|| 元素到数组串接 3 || ARRAY[4,5,6] {3,4,5,6}
|| 数组到元素串接 ARRAY[4,5,6] || 7 {4,5,6,7}

数组比较使用默认的 B-Tree 在元素数据类型上的比较函数对数组内容按元素逐一进行。 多维数组的元素按照行序进行访问(最后的下标变化最快)。如果两个数组的内容相同但维数不等,那么维度信息中的第一个不同将决定排序顺序(这是对PostgreSQL 8.2 之前版本的修改: 老版本认为内容相同的两个数组相等,即使它们的维数或下标范围并不相同)。

参阅第 8.15 节获取有关数组操作符行为的更多细节。有关哪些操作符支持被索引的操作,请参阅第 11.2 节

表 9.49展示了可以用于数组类型的函数。 参阅第 8.15 节获取更多信息以及使用这些函数的例子。

表 9.49. 数组函数

函数 返回类型 描述 例子 结果
array_append(anyarrayanyelement) anyarray 向一个数组的末端追加一个元素 array_append(ARRAY[1,2], 3) {1,2,3}
array_cat(anyarrayanyarray) anyarray 连接两个数组 array_cat(ARRAY[1,2,3], ARRAY[4,5]) {1,2,3,4,5}
array_ndims(anyarray) int 返回数组的维度数 array_ndims(ARRAY[[1,2,3], [4,5,6]]) 2
array_dims(anyarray) text 返回数组的维度的文本表示 array_dims(ARRAY[[1,2,3], [4,5,6]]) [1:2][1:3]
array_fill(anyelementint[], [int[]]) anyarray 返回一个用提供的值和维度初始化好的数组,可以选择下界不为 1 array_fill(7, ARRAY[3], ARRAY[2]) [2:4]={7,7,7}
array_length(anyarrayint) int 返回被请求的数组维度的长度 array_length(array[1,2,3], 1) 3
array_lower(anyarrayint) int 返回被请求的数组维度的下界 array_lower('[0:2]={1,2,3}'::int[], 1) 0
array_position(anyarrayanyelement [int]) int 返回数组中第二个参数第一次出现的下标。 起始于第三个参数或第一个元素指示的元素位置(数组必须是一维的) array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon') 2
array_positions(anyarrayanyelement) int[] 返回作为第一个参数的数组中第二个参数出现的数组下标(数组必须是一维的) array_positions(ARRAY['A','A','B','A'], 'A') {1,2,4}
array_prepend(anyelementanyarray) anyarray 向一个数组的首部追加一个元素 array_prepend(1, ARRAY[2,3]) {1,2,3}
array_remove(anyarrayanyelement) anyarray 从数组中移除所有等于给定值的所有元素(数组必须是一维的) array_remove(ARRAY[1,2,3,2], 2) {1,3}
array_replace(anyarrayanyelementanyelement) anyarray 将每一个等于给定值的数组元素替换成一个新值 array_replace(ARRAY[1,2,5,4], 5, 3) {1,2,3,4}
array_to_string(anyarraytext [text]) text 使用提供的定界符和可选的空串连接数组元素 array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') 1,2,3,*,5
array_upper(anyarrayint) int 返回被请求的数组维度的上界 array_upper(ARRAY[1,8,3,7], 1) 4
cardinality(anyarray) int 返回数组中元素的总数,如果数组为空则返回 0 cardinality(ARRAY[[1,2],[3,4]]) 4
string_to_array(texttext[text]) text[] 使用提供的定界符和可选的空串将字符串划分成数组元素 string_to_array('xx~^~yy~^~zz', '~^~', 'yy') {xx,NULL,zz}
unnest(anyarray) setof anyelement 将一个数组扩展成一组行 unnest(ARRAY[1,2])
1
2
(2 rows)
unnest(anyarrayanyarray[, ...]) setof anyelement, anyelement [, ...] 把多维数组(可能是不同类型)扩展成一个行的集合。 这只允许用在 FROM 子句中,见第 7.2.1.4 节 unnest(ARRAY[1,2],ARRAY['foo','bar','baz'])
1    foo
2    bar
NULL baz
(3 rows)

array_positionarray_positions中, 每个数组元素与使用IS NOT DISTINCT FROM语法的搜索值进行比较。

array_position中,如果没有找到该值,则返回NULL

array_positions中,如果数组是NULL,则返回NULL; 如果数组中没有找到该值,相反返回空数组。

string_to_array中,如果定界符参数为 NULL,输入字符串中的每一个字符将变成结果数组中的一个独立元素。如果定界符是一个空串,则整个输入字符串被作为一个单一元素的数组返回。否则输入字符串会被在每一个出现定界符字符串的位置分裂。

string_to_array中,如果空值串参数被忽略或者为 NULL,输入中的子串不会被替换成 NULL。在array_to_string中,如果空值串参数被忽略或者为 NULL,该数组中的任何空值元素会被简单地跳过并且不会在输出串中被表示。

注意

string_to_array的行为中有两点与PostgreSQL 9.1之前的版本不同。首先,当输入串的长度为零时,它将返回一个空(无元素)数组而不是 NULL。其次,如果定界符串为 NULL,该函数会将输入划分成独立字符,而不是像以前那样返回 NULL。

也可参见第 9.20 节了解用于数组的聚集函数array_agg

本文转自PostgreSQL中文社区,原文链接:9.18. 数组函数和操作符

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1041 152
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
817 156
|
8月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
936 213
|
5月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
681 5
|
8月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
1079 2
|
8月前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
872 1
|
12月前
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
451 2
|
关系型数据库 Serverless 定位技术
PostgreSQL GIS函数判断两条线有交点的函数是什么?
PostgreSQL GIS函数判断两条线有交点的函数是什么?
1003 60
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)

推荐镜像

更多