Postgresql数据类型-数组类型

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全志R128平台SPI与DBI点屏性能大对比

SPI 与 DBI 性能对比 R128 平台的 SPI 接口参数如下 全双工同步串行接口Master/Slave模式可配置支持最大96MHz时钟频率支持SPI Mode0/1/2/3片选和时钟的极性和相位可配置5个时钟源支持中断或DMA传输支持多片选支持Standard Single/Dual/Quad SPI,FIFO深度64B支持B…

Qt高级--(1)自定义导航栏

好久没有水博客,参考别人的写一个自定义的导航栏吧。用处挺多的,可以用来切换到不同的信息显示界面。 功能点 1.默认情况下,文字居中显示,不显示图标,不显示三角。 2.可设置文字左侧、顶部、右侧、底部边距&#xff…

功率放大器在微流控测试中的应用有哪些

微流控技术是一种在纳米或微米尺度上操作和控制流体的技术,它在生物医学、化学分析和材料科学等领域具有广泛的应用前景。然而,由于微流控系统中涉及到的流体操作和流动过程往往需要较高的电压和电流,因此在微流控测试中常常需要使用功率放大…

网络问题导致pycharm无法提交代码到代码仓库

现象 ssh: Could not resolve hostname github.com: Name or service not known fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 原因及解决办法 可能不是自己权限有问题,而是…

伦敦银为什么降价

作为贵金属家族中的一员,白银具有一定的金融属性,但它同时也是一种工业金属,在太阳能、汽车、电子工业上有着广泛的用途,所以其价格会受到诸多因素的影响。伦敦银作为紧密跟着国际现货白银价格走势的品种,其降价的原因…

Python高级语法----高级Python函数式编程

文章目录 1. 函数式编程概念2. 使用functools模块3. 深入理解lambda, map, filter, reduce函数a. lambda 函数b. map 函数c. filter 函数d. reduce 函数1. 函数式编程概念 函数式编程是一种编程范式,它将计算视为函数的评估,并避免使用程序状态及可变数据。在Python中,函数…

git 命令行回退版本

git 命令行回退版本 git 命令行回退版本命令: 1.切换到需要回退的分支 git checkout branch-v2.0.02.更新远程分支 git fetch3.找到需要回退版本的版本号git revert a6914da55ff40a09e67ac2426b86f1212e6580eb4.清除工作区缓存git clean -df5.强制提交git push -f

软件外包开发的需求对接

软件外包开发的成功与否很大程度上取决于需求对接的有效性。以下是一些建议,可帮助您在软件外包开发中进行需求对接,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.明确业务目标和需求&…

个推用户运营全新上线用户生命周期管理功能,助力APP快速实现用户精细化运营

近期,个推用户运营上线了APP用户生命周期管理功能。该功能可以帮助APP多维度洞察⽤户所处的⽣命周期分布,旨在帮助运营人员快速全面地了解用户,从而基于用户生命周期针对性地做出用户运营策略调整,提升用户价值和运营指标。 个推如…

数据结构——AVL树

搜索二叉树能够在二叉树情况比较好的情况下,使查找的时间复杂度达到O(logN)。 但是,它的查找的时间复杂度依旧是O(N),面临的情况是所有的树都只有左/右子树的情况下。 那么今天介绍的AVL树就是解决这一情况的。 但是由于AVL树对我来说有些复杂…

ElementUI表格el-table自适应高度(表头表尾固定不动)

ElementUI表格el-table自适应高度&#xff08;表头表尾固定不动&#xff09;&#xff0c;内容只在中间滚动&#xff0c;效果如图&#xff1a; 实现代码 <div class"mt-10" :style"{height:tableHeight}"><div class"operation-bar">…

算法通关村第八关-黄金挑战

大家好我是苏麟 ...... 路径总和2 描述 : 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 题目 : LeetCode 113.路径总和2 113. 路径总和 II 分析 : 这…

uni-app的下拉搜索选择组合框

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家介绍uni-app中一款可以搜索下拉选择输入框的插件 下拉搜索选择组合框 superwei-combox 组合框 uni-app中可下拉搜索选…

智能配方颗粒管理系统解决方案,专业实现中医药产业数字化-亿发

“中药配方颗粒”&#xff0c;又被称为免煎中药&#xff0c;源自传统中药饮片&#xff0c;经过提取、分离、浓缩、干燥、制粒、包装等工艺加工而成。这种新型配方药物完整保留了原中药饮片的所有特性。既能满足医师的辨证论治和随症加减需求&#xff0c;同时具备强劲好人高效的…

模拟退火算法MATLAB实现

介绍 算法试图随着控制参数T的降低&#xff0c;使目标函 数值f&#xff08;内能E&#xff09;也逐渐降低&#xff0c;直至趋于全局最 小值&#xff08;退火中低温时的最低能量状态&#xff09;&#xff0c;算法 工作过程就像固体退火过程一样。 Metropolis准则——–以概率接受…

有什么价格实惠的猫罐头?2023良心性价比的猫罐头推荐!

选购猫罐头至关重要&#xff0c;好的猫罐头不仅营养丰富&#xff0c;水分充足&#xff0c;适口性佳&#xff0c;还能易于消化吸收。然而&#xff0c;若选择不当&#xff0c;可能不仅无法达到预期效果&#xff0c;甚至可能产生负面影响。 作为一个从事宠物行业7年的宠物店店长&…

upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第四关方法一通关思路1.看源码2、点空格绕过 三、靶场第四关方法二通关思路1、htaccess文件是什么2、通过上传htaccess文件进行绕过1、使用前提2、上传htaccess文件&#xff0c;然后再上传phpinfo的jpg文件 总结 前言 此文章只用于学…

阶段七-Day04-Spring03

一、Sping声明式事务 1. 编程式事务介绍 整个事务控制的代码都需要程序员自己编写。包含&#xff1a;开启事务&#xff08;openSession()&#xff0c;创建SqlSession时MyBatis底层自动创建Transaction对象&#xff09;、提交事务(session.commit())、回滚事务(session.rollba…

Shotcut for Mac/Win:免费的开源视频编辑软件

Shotcut 是一款免费的开源视频编辑软件&#xff0c;允许用户为各种目的编辑和创建视频。它适用于 Windows、Mac 和 Linux 操作系统。Shotcut 具有用户友好的界面&#xff0c;并提供一系列功能&#xff0c;例如支持多种视频格式、音频过滤器和视频效果。 Shotcut的一些主要功能…

C++拷贝构造函数和运算符重载

目录 一&#xff0c;拷贝构造函数 二&#xff0c;运算符重载 一&#xff0c;拷贝构造函数 概念&#xff1a;在类的定义中&#xff0c;构造函数只是单纯将内置类型进行初始化&#xff0c;而拷贝构造函数是将整个类进行拷贝到另一个类中进行初始化。在定义拷贝构造函数时&…