Postgresql数据类型-数组类型

news2024/11/23 9:05:53

PostgreSQL支持一维数组和多维数组,常用的数组类型为数字类型数组和字符型数组,也支持枚举类型、复合类型数组。

数组类型定义

先来看看数组类型的定义,创建表时在字段数据类型后面加方括号“[]”即可定义数组数据类型,如下所示:

        CREATE TABLE test_array1 (
            id          integer,
            array_i     integer[],
            array_t     text[]
        );

以上integer[]表示integer类型一维数组,text[]表示text类型一维数组。

数组类型值输入

数组类型的插入有两种方式,第一种方式使用花括号方式,如下所示:

        '{ val1 delim val2 delim ... }'

将数组元素值用花括号“{}”包围并用delim分隔符分开,数组元素值可以用双引号引用,delim分隔符通常为逗号,如下所示:

        mydb=> SELECT '{1,2,3}';
            ?column?
        ----------
            {1,2,3}
        (1 row)
        往表test_array1中插入一条记录的代码如下所示:
        mydb=> INSERT INTO test_array1(id, array_i, array_t)
        VALUES (1, '{1,2,3}', '{"a", "b", "c"}');
        INSERT 0 1

数组类型插入的第二种方式为使用ARRAY关键字,例如:

        mydb=> SELECT array[1,2,3];
                array
        ---------
            {1,2,3}
        (1 row)

往test_array2表中插入另一条记录,代码如下所示:

        mydb=> INSERT INTO test_array1(id, array_i, array_t)
            VALUES (2, array[4,5,6], array['d', 'e', 'f']);
        INSERT 0 1

表test_array2的数据如下所示:

        mydb=> SELECT * FROM test_array1;
            id | array_i | array_t
        -------+---------+---------
              1 | {1,2,3} | {a, b, c}
              2 | {4,5,6} | {d, e, f}
        (2 rows)

查询数组元素

如果想查询数组所有元素值,只需查询数组字段名称即可,如下所示:

        mydb=> SELECT array_i FROM test_array1 WHERE id=1;
            array_i
        ---------
            {1,2,3}
        (1 row)

数组元素的引用通过方括号“[]”方式,数据下标写在方括号内,编号范围为1到n, n为数组长度,如下所示:

        mydb=> SELECT array_i[1], array_t[3] FROM test_array1 WHERE id=1;
            array_i | array_t
        ------------+---------
                  1 | c
        (1 row)

数组元素的追加、删除、更新

PostgreSQL数组类型支持数组元素的追加、删除与更新操作,数组元素的追加使用array_append函数,用法如下所示:

        array_append(anyarray, anyelement)

array_append函数向数组末端追加一个元素,如下所示:

        mydb=> SELECT array_append(array[1,2,3],4);
            array_append
        --------------
            {1,2,3,4}
        (1 row)

数据元素追加到数组也可以使用操作符||,如下所示:

        mydb=> SELECT array[1,2,3] || 4;
            ?column?
        -----------
            {1,2,3,4}
        (1 row)

数组元素的删除使用array_remove函数,array_remove函数用法如下所示:

        array_remove(anyarray, anyelement)

array_remove函数将移除数组中值等于给定值的所有数组元素,如下所示:

        mydb=> SELECT array[1,2,2,3], array_remove(array[1,2,2,3],2);
            array   | array_remove
        ------------+--------------
          {1,2,2,3} | {1,3}
        (1 row)

数组元素的修改代码如下所示:

        mydb=> UPDATE test_array1 SET array_i[3]=4 WHERE id=1 ;
        UPDATE 1

整个数组也能被更新,如下所示:

        mydb=> UPDATE test_array1 SET array_i=array[7,8,9] WHERE id=1;
        UPDATE 1

数组操作符

PostgreSQL数组元素支持丰富操作符,如表所示。

PostgreSQL支持丰富的数组函数,给数组添加元素或删除元素,如下所示:

        mydb=> SELECT array_append(array[1,2],3), array_remove(array[1,2],2);
            array_append | array_remove
        -----------------+--------------
            {1,2,3}      | {1}
        (1 row)

 获取数组维度,如下所示:

        mydb=> SELECT array_ndims(array[1,2]);
            array_ndims
        -------------
                1
        (1 row)

获取数组长度,如下所示:

        mydb=> SELECT array_length(array[1,2],1);
            array_length
        --------------
                2
        (1 row)

返回数组中某个数组元素第一次出现的位置,如下所示:

        mydb=> SELECT array_position(array['a', 'b', 'c', 'd'], 'd');
            array_position
        ----------------
                4
        (1 row)

数组元素替换可使用函数array_replace,语法如下:

        array_replace(anyarray, anyelement, anyelement)

函数返回值类型为anyarray,使用第二个anyelement替换数组中的相同数组元素,如下所示:

        mydb=> SELECT array_replace(array[1,2,5,4],5,10);
            array_replace
        ---------------
            {1,2,10,4}
        (1 row)

将数组元素输出到字符串,可以使用array_to_string函数,语法如下:

        atray_to_string(anyarray, text [, text])

函数返回值类型为text,第一个text参数指分隔符,第二个text表示将值为NULL的元素使用这个字符串替换,示例如下:

        mydb=> SELECT array_to_string(array[1,2, null,3], ', ', '10');
            array_to_string
        -----------------
            1,2,10,3
        (1 row)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1203308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集成Line、Facebook、Twitter、Google、微信、QQ、微博、支付宝的三方登录sdk

下载地址: https://githubfast.com/anerg2046/sns_auth 安装方式建议使用composer进行安装 如果linux执行composer不方便的话,可以在本地新建个文件夹,然后执行上面的composer命令,把代码sdk和composer文件一起上传到项目适当位…

【Unity插件】2D模拟绳子的插件——Rope 2D Editor

文章目录 前言资源unity商店地址:我这里有一个比较老旧的版本: 使用创建绳子场景使用时效果 参考完结 前言 最近发现一个很有意思的插件Rope 2D Editor,这是一个简单而强大的 2d 绳索编辑器。这是我为我的游戏(Dabdob&#xff09…

郑州大学2020级信息安全专业——保研小结

最终上岸 夏令营: 夏令营开始的时间一般比较早,在期末考试之前就已经开始了,需要提前联系导师,有的学校是弱com,导师愿意要你入营的概率和优营的概率就会比较大,因此要提前联系导师,复习好项目…

打开word文档报错,提示HRESULT 0x80004005 位置: 部分: /word/comments.xml,行: 0,列: 0

某用户遇到这样一个奇怪的问题,就是回复完word的批注后,保存文档再打开就会报错,提示很抱歉,无法打开XXX,因为内容有问题。,详细信息提示HRESULT 0x80004005 位置: 部分: /word/comments.xml,行: 0,列: 0 c…

docker简易入门(极简,纯干货)

简介 Docker是一种容器化平台,它可以用来轻松地创建、部署和运行应用程序和服务。Docker使用容器技术来管理应用程序的运行环境,它将应用程序和服务打包到一个易于移植的容器中,然后在任何地方运行这个容器,无需担心不同环境之间…

动作捕捉系统通过VRPN与ROS系统通信

NOKOV度量动作捕捉系统支持通过VRPN与机器人操作系统ROS通信,进行动作捕捉数据的传输。 一、加载数据 打开形影动捕软件,加载一段后处理数据。 这里选择一段小车飞机的同步数据。在这段数据里面,场景下包含两个刚体,分别是小车和…

基于注解的声明式事务

1.什么是事务 数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。 2.事务的特性 A:原子性(A…

互联网Java工程师面试题·微服务篇·第一弹

目录 ​编辑 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3、微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片&#xff0c…

【MySQL】事务(上)

文章目录 事务概念什么是事务?为什么要有事务?事务的版本支持事务的提交方式事务常见操作方式基本操作 事务概念 mysql 本身内部采用 多线程的方式,来实现数据存储 相关的工作 就注定对数据 有并发访问的场景 为了解决这类问题,就…

RestCloud AppLink已支持的数据源有哪些?

RestCloud AppLink是什么? 首先,我们需要了解RestCloud AppLink是什么,AppLink是一款由RestCloud公司推出的超级应用连接器。不需要开发,零代码,低成本即可快速打通数百款应用之间的数据。通过流程搭建,可…

【ATTCK】MITRE Caldera 简介

一、什么是Caldera caldera是一个基于MITRE ATT&CK™构建的网络安全框架。其目标是创建一种工具,通过提供自动化安全评估来增强网络从业者的能力,从而节省用户的时间、金钱和精力。为此,需要几个关键组件才能使 Caldera 成为行业领先的平…

在Gradio实现两个下拉框进行联动案例解读:change/click/input实践(三)

本文的代码来自ChuanhuChatGPT,通过拆解写得比较好的gradio项目,可以更快理解gradio的一些使用。 ChuanhuChatGPT整体页面效果是比较合理的: 1 下拉框联动效果的解读 本篇是将一个其中【对话】中的【Prompt加载】小模块抽取出来并稍稍修改…

电商平台api接口,淘宝/天猫、1688、拼多多、亚马逊等电商数据平台api接口演示案例

API简单来说是一种数据的传输方式,使用已经开发好的API接口可以缩短项目时间,减少开发成本。 比如说数据宝平台提供的实名认证API接口,像这种实名认证类的API接口是无法自行开发的,如果自行对接部委,能否成功不说&…

【已解决】vscode 配置C51和MDK环境配置

使用命令 gcc -v -E -x c - 看自己gcc 有没有安装好 也可以在自己的vscode中新建一个终端 gcc -v g -v 首先把自己的C51 和MDK 路径 设置好 vscode 中设置 C51 和 MDK 的路径 这是你keil 中写 51单片机和 STM32 的 如果你出现什么include 的什么波浪线,那估计…

力扣511. 游戏玩法分析 I

答案: select player_id,min(event_date) as first_login from Activity a group by player_id我最开始写的错误答案是这样的: select player_id,event_date as first_login from Activity a group by player_id having event_date min(event_date…

一篇揭秘Linux高性能服务epoll 的本质

导语 epoll接口是为解决Linux内核处理大量文件描述符而提出的方案。该接口属于Linux下多路I/O复用接口中select/poll的增强。其经常应用于Linux下高并发服务型程序,特别是在大量并发连接中只有少部分连接处于活跃下的情况 (通常是这种情况),在该情况下能…

copilot 产生 python工具函数并生成单元测试

stock.py 这个文件,我只写了注释(的开头),大部分注释内容和函数都是copilot # split a string and extract the environment variable from it # input can be , pathabc, pathabc;pathdef, pathabc;pathdef;pathghi # output i…

快速拉取聚水潭单据的ETL工具

聚水潭介绍 聚水潭平台则是国内较为出名的电商ERP平台,为企业提供了便捷的销售和管理服务,专注于提高交易效率,但是如何将数据快速同步到其他系统一直是很多企业的痛点。 ETLCloud数据集成平台提供了丰富的数据分析工具和算法模型&#xff…

Oracle 账户被锁:the account is locked 解决方法

Oracle 账户被锁:the account is locked 解决方法 连接Oracle数据库时报错账户已锁定错误 解决方法一:命令行模式: 步骤一: WinR打开命令行输入:sqlplus 使用system或sys账户以管理员身份登录,口令即安装…