当前位置: 首页 > news >正文

PostgreSQL 常见数组操作函数语法、功能

一、数组创建类:生成新数组

用于直接构造或从其他数据类型转换为数组

1. ARRAY[]

  • 语法ARRAY[元素1, 元素2, ...]

  • 功能:直接创建一个数组(最基础的数组构造方式),支持任意数据类型(整数、字符串、日期等)。

    SELECT ARRAY[1, 2, 3]; -- 整数数组
    -- 结果:{1,2,3}(类型为 integer[])
    ​
    SELECT ARRAY['a', 'b', 'c']; -- 字符串数组
    -- 结果:{a,b,c}(类型为 text[])
    ​
    SELECT ARRAY[[1,2], [3,4]]; -- 二维数组
    -- 结果:{{1,2},{3,4}}(类型为 integer[][])

2. STRING_TO_ARRAY(string, delimiter)

  • 语法STRING_TO_ARRAY(字符串, 分隔符)

  • 功能:将字符串按指定分隔符拆分为数组,常用于将逗号 / 空格分隔的字符串转换为数组。

    SELECT STRING_TO_ARRAY('apple,banana,orange', ',');
    -- 结果:{apple,banana,orange}(text[]类型)
    ​
    SELECT STRING_TO_ARRAY('2023-10-01 14:30:00', ' ');
    -- 结果:{2023-10-01,14:30:00}(拆分日期和时间)

二、数组聚合与拆分类:行与数组的转换

常用于处理 “一对多” 数据关系。

3. ARRAY_AGG(expression)

  • 语法ARRAY_AGG(expression [ORDER BY ...] [NULLS {FIRST|LAST}])

  • 功能:聚合函数,将分组后的多行数据的指定列值合并为一个数组(核心聚合函数)。

    -- 将每个学生的科目聚合为数组
    SELECT name, ARRAY_AGG(subject ORDER BY subject) AS subjects
    FROM scores
    GROUP BY name;
    -- 结果:
    -- name  | subjects
    -- ------+----------------
    -- Alice | {Math,English}
    -- Bob   | {Physics,Math}

4. UNNEST(array)

  • 语法UNNEST(数组)

  • 功能:将数组拆分为多行(与 ARRAY_AGG 互为反向操作),常用于数组的行转列。

    SELECT UNNEST(ARRAY['a', 'b', 'c']);
    -- 结果(多行):
    -- a
    -- b
    -- c
    ​
    -- 结合表使用:将数组字段拆分为多行
    SELECT id, UNNEST(tags) AS tag 
    FROM articles 
    WHERE id = 1;
    -- 假设 articles.tags 是 {postgres,sql},结果:
    -- id | tag
    -- ---+---------
    -- 1  | postgres
    -- 1  | sql

三、数组查询与统计类:获取数组信息

用于查询数组元素位置、统计数组长度或总元素数量

5. ARRAY_LENGTH(array, dimension)

  • 语法ARRAY_LENGTH(数组, 维度)

  • 功能:返回数组指定维度的长度(默认维度为 1,即一维数组的元素个数)。

    SELECT ARRAY_LENGTH(ARRAY[1,2,3], 1); -- 一维数组长度
    -- 结果:3
    ​
    SELECT ARRAY_LENGTH(ARRAY[[1,2], [3,4], [5,6]], 1); -- 二维数组第一维长度(行数)
    -- 结果:3(表示有3行)
    ​
    SELECT ARRAY_LENGTH(ARRAY[[1,2], [3,4]], 2); -- 二维数组第二维长度(列数)
    -- 结果:2(表示每行有2列)

6. CARDINALITY(array)

  • 语法CARDINALITY(数组)

  • 功能:返回数组中所有元素的总数量(适用于多维数组,统计所有维度的元素和)。

    SELECT CARDINALITY(ARRAY[1,2,3]); -- 一维数组
    -- 结果:3
    ​
    SELECT CARDINALITY(ARRAY[[1,2], [3,4]]); -- 二维数组(2行2列)
    -- 结果:4(总元素数 2×2=4)

7. ARRAY_POSITION(array, element)

  • 语法ARRAY_POSITION(数组, 元素)

  • 功能:返回元素在数组中首次出现的位置(索引从 1 开始,元素不存在则返回 NULL)。

    SELECT ARRAY_POSITION(ARRAY['a','b','c'], 'b');
    -- 结果:2('b'在第2位)
    ​
    SELECT ARRAY_POSITION(ARRAY[10,20,30], 25);
    -- 结果:NULL(25不存在)

四、数组修改类:调整数组内容

对已有数组进行元素添加、删除、替换或拼接,生成新的修改后数组(原数组不变)

8. ARRAY_APPEND(array, element)

  • 语法ARRAY_APPEND(原数组, 新元素)

  • 功能:在数组的末尾添加一个新元素,返回新数组(原数组不变)。

    SELECT ARRAY_APPEND(ARRAY[1,2], 3);
    -- 结果:{1,2,3}
    ​
    SELECT ARRAY_APPEND(ARRAY['a'], 'b');
    -- 结果:{a,b}

9. ARRAY_PREPEND(element, array)

  • 语法ARRAY_PREPEND(新元素, 原数组)

  • 功能:在数组的开头添加一个新元素,返回新数组。

    SELECT ARRAY_PREPEND(0, ARRAY[1,2]);
    -- 结果:{0,1,2}
    ​
    SELECT ARRAY_PREPEND('start', ARRAY['middle', 'end']);
    -- 结果:{start,middle,end}

10. ARRAY_CAT(array1, array2)

  • 语法ARRAY_CAT(数组1, 数组2)

  • 功能:拼接两个数组(数组 1 在前,数组 2 在后),返回合并后的新数组。

    SELECT ARRAY_CAT(ARRAY[1,2], ARRAY[3,4]);
    -- 结果:{1,2,3,4}
    ​
    SELECT ARRAY_CAT(ARRAY['a'], ARRAY['b','c']);
    -- 结果:{a,b,c}

11. ARRAY_REMOVE(array, element)

  • 语法ARRAY_REMOVE(数组, 要移除的元素)

  • 功能:移除数组中所有与指定元素相等的元素(区分 NULLNULL 需显式指定)。

    SELECT ARRAY_REMOVE(ARRAY[1,2,2,3], 2); -- 移除所有2
    -- 结果:{1,3}
    ​
    SELECT ARRAY_REMOVE(ARRAY['a', NULL, 'a'], NULL); -- 移除所有NULL
    -- 结果:{a,a}

12. ARRAY_REPLACE(array, old_element, new_element)

  • 语法ARRAY_REPLACE(数组, 旧元素, 新元素)

  • 功能:将数组中所有旧元素替换为新元素,返回替换后的数组。

    SELECT ARRAY_REPLACE(ARRAY[1,2,1], 1, 0); -- 将所有1替换为0
    -- 结果:{0,2,0}
    ​
    SELECT ARRAY_REPLACE(ARRAY['x','y','x'], 'x', 'z');
    -- 结果:{z,y,z}

五、数组排序与填充类:标准化数组内容

用于对数组元素排序,或生成固定值、固定维度的数组

13. ARRAY_SORT(array)

  • 语法ARRAY_SORT(数组)(PostgreSQL 9.5+ 支持基础排序,14+ 支持自定义排序)

  • 功能:对数组元素进行升序排序(默认按元素本身大小)。

    SELECT ARRAY_SORT(ARRAY[3,1,2]); -- 整数排序
    -- 结果:{1,2,3}
    ​
    SELECT ARRAY_SORT(ARRAY['c','a','b']); -- 字符串排序
    -- 结果:{a,b,c}

14. ARRAY_FILL(value, dimensions)

  • 语法ARRAY_FILL(填充值, 维度数组)

  • 功能:生成一个指定维度、并用指定值填充的数组(维度数组表示各维度的长度)。

    SELECT ARRAY_FILL(0, ARRAY[3]); -- 一维数组,长度3,填充0
    -- 结果:{0,0,0}
    ​
    SELECT ARRAY_FILL('x', ARRAY[2,2]); -- 二维数组(2行2列),填充'x'
    -- 结果:{{x,x},{x,x}}

六、数组运算符补充

运算符功能说明示例
=数组是否完全相等ARRAY[1,2] = ARRAY[1,2]
@>数组是否包含另一个数组ARRAY[1,2,3] @> ARRAY[2]
<@数组是否被另一个数组包含ARRAY[2] <@ ARRAY[1,2,3]
&&数组是否有交集ARRAY[1,2] && ARRAY[2,3]
http://www.dtcms.com/a/495908.html

相关文章:

  • 珠海企业医疗网站建设惠州百度seo电话
  • 怎么查看网站备案信息怎样从网上卖东西啊
  • vue3 实现一个数组项在水平轴上按照奇偶数项分别上下排列
  • 服装类电子商务网站建设报告网页突然打不开是什么原因
  • 激光散斑血流图像去噪技术研究及其MATLAB实现
  • 帝国cms下载类网站怎么做怎么才能注册网站
  • 自助制作网站简述网站建设方法
  • java微服务-尚医通-数据字典-5
  • 建设营销型网站模板如何修改公司网站内容
  • 江西临川建设集团有限公司网站湖南网站建设 尖端磐石网络
  • 深圳保障性住房排名查询换个网站对seo有什么影响
  • 提升后牙树脂充填效率的器械选择要点
  • YOLO-V3
  • 论部落战争对两性思维的终极塑造及其政治遗产​​
  • Java 12的性能优化对不同规模和类型的应用程序有何影响?
  • 深入解析 Cherry Studio 的创建的本地知识库并用于问答的过程
  • 做图网站被告wordpress 学校主题
  • Joomla SQL注入漏洞复现:原理详解+环境搭建+渗透实践(CVE-2017-8917 两种方法渗透)
  • 天津网站优化公司哪家好一个公网ip可以做几个网站
  • 【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
  • 什么网站源码做分类信息网站好WordPress巨卡无比
  • 网站不绑定域名解析网络优化app哪个好
  • 数据结构(4)--------------- 串
  • 湖北网站建设网址上海有哪些做网站的
  • 最新vmware安装kali
  • 端口号、常见协议和套接字
  • YOLOv3 核心知识点解析
  • 企业网站建设费怎么记账最近时政热点新闻
  • 2022年ASOC SCI2区TOP,基于竞争与合作策略的金字塔粒子群算法PPSO,深度解析+性能实测,深度解析+性能实测
  • 深入理解C++中的浅拷贝与深拷贝:从类的拷贝函数开始