PostgreSQL 给数组排序
来源:互联网 发布:mac视频下载插件 编辑:程序博客网 时间:2024/05/20 13:40
PostgreSQL 支持数组,但是没有对数据内部元素进行排序的一个函数。 今天我分别用PLPGSQL和PLPYTHONU写了一个。
示例表结构:
示例数据:
plsql存储函数array_sort执行结果:
升序
降序
python 存储函数array_sort_python 执行结果:
降序:
升序:
附: array_sort_python 代码:
array_sort 代码:
示例表结构:
t_girl=# \d test_array; Table "ytt.test_array" Column | Type | Modifiers --------+-----------+--------------------------------------------------------- id | integer | not null default nextval('test_array_id_seq'::regclass) str1 | integer[] | Indexes: "test_array_pkey" PRIMARY KEY, btree (id)
示例数据:
t_girl=# select * from test_array; id | str1 ----+--------------------------- 1 | {100,200,300,5,10,20,100} 2 | {200,100,2,30,0,5} 3 | {2000,101,2,30,0,10}(3 rows)Time: 1.513 ms
plsql存储函数array_sort执行结果:
升序
t_girl=# select id,array_sort(str1,'asc') from test_array; id | array_sort ----+--------------------------- 1 | {5,10,20,100,100,200,300} 2 | {0,2,5,30,100,200} 3 | {0,2,10,30,101,2000}(3 rows)Time: 2.377 ms
降序
t_girl=# select id,array_sort(str1,'desc') from test_array; id | array_sort ----+--------------------------- 1 | {300,200,100,100,20,10,5} 2 | {200,100,30,5,2,0} 3 | {2000,101,30,10,2,0}(3 rows)Time: 3.318 mst_girl=#
python 存储函数array_sort_python 执行结果:
降序:
t_girl=# select id,array_sort_python(str1,'desc') from test_array; id | array_sort_python ----+--------------------------- 1 | {300,200,100,100,20,10,5} 2 | {200,100,30,5,2,0} 3 | {2000,101,30,10,2,0}(3 rows)
Time: 2.797 ms
升序:
t_girl=# select id,array_sort_python(str1,'asc') from test_array; id | array_sort_python ----+--------------------------- 1 | {5,10,20,100,100,200,300} 2 | {0,2,5,30,100,200} 3 | {0,2,10,30,101,2000}(3 rows)Time: 1.856 mst_girl=#
附: array_sort_python 代码:
CREATE or replace FUNCTION array_sort_python(c1 text [],f_order text) RETURNS text [] AS $$result = []if f_order.lower() == 'asc': c1.sort() result = c1elif f_order.lower() == 'desc': c1.sort(reverse=True) result = c1else: passreturn result$$ LANGUAGE plpythonu;
array_sort 代码:
create or replace function array_sort(anyarray,f_order text) returns anyarray as $ytt$declare array1 alias for $1; tmp int; result text [];begin if lower(f_order) = 'desc' then for tmp in select unnest(array1) as a order by a desc loop result := array_append(result,tmp::text); end loop; return result; elsif lower(f_order) = 'asc' then for tmp in select unnest(array1) as a order by a asc loop result := array_append(result,tmp::text); end loop; return result; else return array['f_order must be asc or desc!']; end if;end;$ytt$ language plpgsql;
0 0
- PostgreSQL 给数组排序
- 给数组排序
- 给字符串数组排序
- 给数组随机排序
- 给数组进行排序
- 如何给二维数组排序
- php中给数组排序
- 通过数组给您的文件排序
- 通过数组给您的文件排序
- (PHP)给数组排序的函数!
- JS中给数组对象排序
- 17.给数组按规定排序
- 关于php给二维数组的排序
- 用自建的函数给数组排序
- JS中给数组对象排序
- 用冒泡法给数组排序
- JS中给数组对象排序
- 利用array_multisort()给二维数组排序
- JavaScript中的字符串大小比较
- 诺基亚所犯的错误是还停留在工业时代,工业时代讲究的是成本和质量
- 黑马程序员_继承
- Asterisk使用数据库配置方法
- 实现业务系统中的用户权限管理--设计篇
- PostgreSQL 给数组排序
- ffmpeg结构体及函数
- linux驱动开发-系统调用
- MTK平台修改默认时间,以及恢复出厂设置后的默认时间显示
- 反向代理负载均衡的实现及开放的反向代理软件的使用方法
- n,没vhjm的国际化的风格
- 用NDKr9编译最新ffmpeg2.0.1(ffmpeg2.0.2)到android平台
- hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解
- 使用pthread_cond_timedwait()超时时间设置问题