暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

社区博客 | PostgreSQL数组类型

点击上方蓝字关注我们





导读

Postgresql支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型、用户自定义的类型、枚举类型以及组合类型。


泽拓昆仑Klustron支持PostgreSQL的数组类型及其所有运算符和函数,前提条件时数组的元素类型是数值类型。Klustron数组类型的用法与PostgreSQL完全相同。


原文作者:CSDN博主[Major_ZYH]


关键词:PostgreSQL、数组类型


01 
数组类型的定义

在创建表时,字段类型后面加方括号 “[ ]” 即可定义数组数据类型,例如:
    postgres=> create table test04(
    id int primary key,
    name_arr text[],
    len_arr int[]);
    CREATE TABLE

    以上text[]表示一堆text类型数组。int[]表示一堆int类型数组。


    02 
    数组类型值输入

    数组类型的插入有两种方式,第一种使用花括号方式:
      postgres=> insert into test04 values (1,'{"bei","jing","shi"}','{3,4,3}');
      INSERT 0 1
      postgres=> select * from test04;
      id | name_arr | age_arr
      ----+----------------+---------
      1 | {bei,jing,shi} | {3,4,3}
      (1 row)

      数组元素放在花括号中,一般用逗号隔开,对于字符类型值要用双引号引用,整个花括号元素用单引号引用。

      第二用方式是用关键字array,例如:
        postgres=> insert into test04 values (2,array['Lu','zhi','shen'],array[2,3,4]);
        INSERT 0 1
        postgres=> select * from test04;
        id | name_arr | age_arr
        ----+----------------+---------
        1 | {bei,jing,shi} | {3,4,3}
        2 | {Lu,zhi,shen} | {2,3,4}
        (2 rows)


        03 
        查询数组元素

        如果查询数组所有元素,那么直接查询字段值即可:
          postgres=> select * from test04;
          id | name_arr | len_arr
          ----+----------------+---------
          1 | {zhang,ya,hui} | {5,2,3}
          2 | {Lu,zhi,shen} | {2,3,4}
          (2 rows)
              
          如果需要查询数组类型字段中某个位置的元素,可以通过方括号 “[]” 的方式,通过元素下标来查询,下标从1开始:
            postgres=> select name_arr[2],len_arr[2] from test04;
            name_arr | len_arr
            ----------+---------
            ya | 2
            zhi | 3
            (2 rows)


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

            4.1 追加,数组元素的桌架可通过使用函数array_append来进行:
              postgres=> update test04 set name_arr=array_append(name_arr,'beizhu');
              UPDATE 2
              postgres=> select * from test04;
              id | name_arr | len_arr
              ----+-----------------------+---------
              1 | {zhang,ya,hui,beizhu} | {5,2,3}
              2 | {Lu,zhi,shen,beizhu} | {2,3,4}
              (2 rows)
              postgres=> update test04 set len_arr=array_append(len_arr,6);
              UPDATE 2
              postgres=> select * from test04;
              id | name_arr | len_arr
              ----+-----------------------+-----------
              1 | {zhang,ya,hui,beizhu} | {5,2,3,6}
              2 | {Lu,zhi,shen,beizhu} | {2,3,4,6}
              (2 rows)

              函数array_append函数会在数组末尾段追加一个指定的元素。

              4.2 删除,使用函数array_remove对数组类型的字段里元素进行删除:
                postgres=> update test04 set name_arr = array_remove(name_arr,'beizhu') where id=1;
                UPDATE 1
                postgres=> select * from test04;
                id | name_arr | len_arr
                ----+----------------------+-----------
                2 | {Lu,zhi,shen,beizhu} | {2,3,4,6}
                1 | {zhang,ya,hui} | {5,2,3,6}
                (2 rows)

                函数array_remove通过指定元素进行删除。如果指定的值在数组中有多个,会全部删除符合的元素。

                4.3 更新,数组中的元素想要修改可以通过指定要修改的元素的下标的方式修改:
                  postgres=> select * from test04 where id=2;
                  id | name_arr | len_arr
                  ----+----------------------+-----------
                  2 | {Lu,zhi,shen,beizhu} | {2,3,4,6}
                  (2 rows)


                  postgres=> update test04 set name_arr[4]='ceshi' where id=2;
                  UPDATE 1
                  postgres=> select * from test04 where id=2;
                  id | name_arr | len_arr
                  ----+---------------------+-----------
                  2 | {Lu,zhi,shen,ceshi} | {2,3,4,6}
                  (1 row)


                  05 
                  数组操作符

                  数组的操作符如下:



                  06 
                  数组函数

                  除了在数组插入、删除、更新中介绍的函数array_append、array_remove外,还有以下几种函数:

                  6.1 获取数组长度的函数array_length:
                    postgres=> select array_length(array[1,3,4,5,6],1);
                    array_length
                    --------------
                    5
                    (1 row)

                    6.2 获取数组纬度的函数array_ndims:
                      postgres=> select array_ndims(array[1,3,4,5,6]);
                      array_ndims
                      -------------
                      1
                      (1 row)
                      postgres=> select array_ndims(array[[1,3],[4,5]]);
                      array_ndims
                      -------------
                      2
                      (1 row)

                      6.3 获取指定元素在数组中第一次出现的位置的函数array_position:
                        postgres=> select array_position(array['a','b','e','g','b'],'b');
                        array_position
                        ----------------
                        2
                        (1 row)

                        6.4 替换数组元素的函数array_replace:
                          postgres=> select array_replace(array['a','b','e','g','b'],'b','ss');
                          array_replace
                          ---------------
                          {a,ss,e,g,ss}
                          (1 row)

                          注意:替换操作会将所有符合的元素都替换成新元素。

                          6.5 将数据元素输出到字符串的函数array_to_string:
                            xzxt=> select array_to_string(array['a','b','e','g','b'],',');
                            array_to_string
                            -----------------
                            a,b,e,g,b
                            (1 row)


                            xzxt=> select array_to_string(array['a','b','e','g','b'],'|');
                            array_to_string
                            -----------------
                            a|b|e|g|b
                            (1 row)

                            输出是指定元素之间的分隔符!!

                            另外还可以处理数组中的空元素,例如将数组[1,2,3,null.4]输出为字符串,以逗号隔开,空的元素设为数字0:
                              # 未处理null
                              xzxt=> select array_to_string(array[1,2,null,4],',');
                              array_to_string
                              -----------------
                              1,2,4
                              (1 row)


                              # 将元素为null的替换成0
                              xzxt=> select array_to_string(array[1,2,null,4],',','0');
                              array_to_string
                              -----------------
                              1,2,0,4
                              (1 row)


                              原文作者:CSDN博主[Major_ZYH]
                              原文链接:
                              https://blog.csdn.net/qq_32838955/article/details/104575359


                              END

                              为促进团队内外的沟通联系,我们Klustron团队的bbs论坛开始上线,欢迎各位同学使用!链接:https://forum.klustron.com/,或者点击文末“阅读原文”,即可跳转

                              论坛目前是测试版,可能还存在不稳定的现象,欢迎各位老师、朋友共享信息,如果遇到问题还请谅解。

                              欢迎大家下载和安装Klustron数据库集群,并免费使用(无需注册码)

                              Klustron 完整软件包下载:
                              http://downloads.klustron.com/

                              如需购买请邮箱联系sales_vip@klustron.com,有相关问题欢迎添加下方小助手微信联系🌹

                              产品文档

                              Klustron 快速入门:
                              https://doc.klustron.com/zh/Klustron_Instruction_Manual.html

                              Klustron 快速体验指南:
                              https://doc.klustron.com/zh/Klustron_Quickly_Guide.html

                              Klustron 功能体验范例:
                              https://doc.klustron.com/zh/Klustron-function-experience-example.html

                              Klustron 产品使用和测评指南:
                              https://doc.klustron.com/zh/product-usage-and-evaluation-guidelines.html


                               点击👆上方,关注获取源代码及技术信息~








                              文章转载自KunlunBase 昆仑数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论