• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

【原创】PostgreSQL给数组排序

mysql 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

PostgreSQL 支持数组,但是没有对数据内部元素进行排序的一个函数。 今天我分别用PLPGSQL和PLPYTHONU写了一个。 示例表结构: t_girl=#\dtest_array;Table”ytt.test_array”Column|Type|Modifiers–来&源gao@dai!ma.com搞$代^码%网——+———–+————————————-

PostgreSQL 支持数组,但是没有对数据内部元素进行排序的一个函数。 今天我分别用PLPGSQL和PLPYTHONU写了一个。

示例表结构:

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;

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【原创】PostgreSQL给数组排序

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址