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. 数组函数和操作符

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

  1. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.10. 位串类型

    8.10. 位串类型 位串就是一串 1 和 0 的串.它们可以用于存储和可视化位掩码.我们有两种类型的 SQL 位类型:bit(n)和bit varying(n),其中 n是一个正整数. bit类型的 ...

  2. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.4. 额外特性

    12.4. 额外特性 12.4.1. 操纵文档12.4.2. 操纵查询12.4.3. 用于自动更新的触发器12.4.4. 收集文档统计数据 这一节描述在文本搜索中有用的一些额外的函数和操作符. 12. ...

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

    9.15. JSON 函数和操作符 表 9.43展示了可以用于两种 JSON 数据类型(见第 8.14 节)的操作符. 表 9.43. json和jsonb 操作符 操作符 右操作数类型 描述 例子 ...

  4. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较

    9.23. 行和数组比较 9.23.1. IN9.23.2. NOT IN9.23.3. ANY/SOME (array)9.23.4. ALL (array)9.23.5. 行构造器比较9.23.6 ...

  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.4. 字符串函数和操作符...

    9.4. 字符串函数和操作符 9.4.1. format 本节描述了用于检查和操作字符串值的函数和操作符.在这个环境中的串包括所有类型character.character varying和text的 ...

  6. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.11. 外部数据

    5.11. 外部数据 PostgreSQL实现了部分的SQL/MED规定,允许我们使用普通SQL查询来访问位于PostgreSQL之外的数据.这种数据被称为外部数据(注意这种用法不要和外键混淆,后者是 ...

  7. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 10 章 类型转换_10.4. 值存储

    10.4. 值存储 将被插入到一个表的值会按照下列步骤被转换到目标列的数据类型. 值存储类型转换 检查一个与目标的准确匹配. 否则,尝试转换表达式为目标类型.如果在两种类型之间的一个 赋值造型已经被注 ...

  8. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.6. 布尔类型

    8.6. 布尔类型 PostgreSQL提供标准的SQL类型boolean,参见表 8.19.boolean可以有多个状态:"true(真)"."false(假)&quo ...

  9. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表

    5.5. 修改表 5.5.1. 增加列5.5.2. 移除列5.5.3. 增加约束5.5.4. 移除约束5.5.5. 更改列的默认值5.5.6. 修改列的数据类型5.5.7. 重命名列5.5.8. 重命 ...

最新文章

  1. 2022-2028年中国改性尼龙行业市场全景评估及产业前景规划报告
  2. framework之Activity启动流程(基于Android11源码)
  3. 《Node.js核心技术教程》读书笔记---思维导图版
  4. NLPCC:预训练在小米的推理优化落地
  5. TOJ 4393 Game
  6. .html()和.text()及.val()的区别
  7. 进阶程序员都不会急于学习编程语言,知道原因吗?
  8. IDEA 导出java文档
  9. Python入门学习—元组/字符串(FishC)
  10. 乐优、青橙商城相关技术总结
  11. Textpattern Solutions: PHP-Based Content Management Made Easy
  12. OpenModelica中的可视化仿真
  13. python 将中文变为拼音_python如何使用pypinyin将中文转换为拼音,详细介绍
  14. 各代iphone尺寸_iPhone12大小尺寸是多少?四款iPhone12系列尺寸对比长宽高
  15. 网络间谍:你的共享文件夹网络监视器
  16. 联想个人云 X1 五盘位NAS全网首发评测 值得买吗?
  17. 删除Windows11中设备与驱动器下的多余图标
  18. 字符串前面加f是什么意思?
  19. 巅峰极客pwn wp
  20. Tableau :蝴蝶图

热门文章

  1. 一个数据应用闭环(转载)
  2. 快速游戏开发工具GameMaker,Action Game Maker使用体验
  3. 终于搞定T43上的Access Connection了!
  4. Asp.net上传文件限制,在大于5M的时候出现DNS解析错误,解决方法。
  5. 日志管理(一):slf4j原理简单介绍
  6. 10个有趣的Python教程,附视频讲解+练手项目。
  7. modprobe:用于向内核中加载模块或者从内核中移除模块
  8. MySQL高级 - 锁 - MyISAM表锁 - 写锁
  9. 搭建K8s集群(二进制方式)-搭建步骤介绍
  10. 通过Nginx复杂安装