PostgreSQL 对数组的遍历操作

作者:懒得去死

这篇文章主要介绍了PostgreSQL 对数组的遍历操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

PostgreSQL 提供了数组类型。

我来演示下如何具体使用

创建一个有数组类型字段的表。

create table test_array(id serial primary key, str1 int[][][]);

插入两条测试数据。

insert into test_array values (1,array[[[1,2],[3,4],[5,6]],[[20,30],[40,50],[70,100]]]); insert into test_array values (2,array[[[100,200],[300,400],[500,600]],[[2000,3000],[4000,5000],[7000,10000]]]);

为了能直观的看到结果集,我们得把数组的值换成普通的类型拿出来, 有以下几种方法。

不带分片的遍历,

create or replace function sp_array2table_simple( anyarray returns table (element int) as $ytt$ declare array1 alias for $1; x int; begin drop table if exists tmp_1; create temporary table tmp_1 (id int); <<label1>> foreach x in array array1 insert into tmp_1 values (x); end loop label1; return query select * from tmp_1; $ytt$ language plpgsql; t_girl=#select sp_array2table_simple(str1) as array_list from test_array where id = 2; array_list ------------ 10000 (12 行记录) 时间:7.780 ms

带分片的遍历:

create or replace function sp_array2table( anyarray returns table (element int) as $ytt$ declare array1 alias for $1; x int[]; nlen int := 0; i int := 1; begin drop table if exists tmp_1; create temporary table tmp_1 (id int); <<label1>> foreach x slice 1 in array array1 nlen := array_length(x,1); i := 1; <<label2>> while i <= nlen loop insert into tmp_1 values (x[i]); i := i + 1; end loop label2; end loop label1; return query select * from tmp_1; $ytt$ language plpgsql; t_girl=#select sp_array2table(str1) as array_list from test_array where id = 2; array_list ------------ 10000 (12 行记录) 时间:20.139 ms

还有就是系统系统了几个函数,直接进行遍历,

比如unnest

t_girl=#select unnest(str1) as array_list from test_array where id = 2; array_list ------------ 10000 (12 行记录) 时间:1.002 ms

比如array_to_string 等。

t_girl=#select regexp_split_to_table(array_to_string(str1,','),',+') as array_list from test_array where id = 2; array_list ------------ 10000 (12 行记录) 时间:0.850 ms

补充:PostgreSQL遍历Json

SELECT orderno, fromno, fromamount, fromlotno ->> 'index' fromlotno, othercondition ->> 'supplicode' supplicode, othercondition ->> 'downcode' downcode, othercondition ->> 'spec' spec, othercondition ->> 'carport' carport SELECT orderno, fromno, fromamount, json_array_elements (fromlotno) fromlotno, json_array_elements (othercondition) othercondition t_feather_source

输出结果:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:
  • 如何查看PostgreSQL数据库中所有表
    如何查看PostgreSQL数据库中所有表
    2023-03-03
  • shell脚本操作postgresql的方法
    shell脚本操作postgresql的方法
    2022-12-12
  • PostgreSQL索引失效会发生什么
    PostgreSQL索引失效会发生什么
    2022-09-09
  • PostgreSQL常用优化技巧示例介绍
    PostgreSQL常用优化技巧示例介绍
    2022-09-09
  • PostgreSQL对数组元素聚合基本方法示例
    PostgreSQL对数组元素聚合基本方法示例
    2022-09-09
  • PostgreSQL:string_agg 多列值聚合成一列的操作示例
    PostgreSQL:string_agg 多列值聚合成一列的操作示例
    2022-09-09
  • PostgreSQL+GeoHash地图点位聚合实现代码
    PostgreSQL+GeoHash地图点位聚合实现代码
    2022-09-09
  • PostgreSQL中的psql命令详解
    PostgreSQL中的psql命令详解
    2022-09-09
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2024 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号