微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 消除postgres中的重复数组值

我有一个类型bigint的数组,如何删除该数组中的重复值?

例如:array [1234,5343,6353,1234,1234]

我应该得到数组[1234,5343,6353,…]

我在postgres手册中测试了示例SELECT uniq(sort(‘{1,2,3,1}’:int [])),但它不工作。

sort(int [])和uniq(int [])函数由intarray contrib模块提供。

要启用它,您必须通过执行可以在postgresql安装的contrib目录中找到的_int.sql文件注册模块。

在Debian / Ubuntu系统上,您必须安装postgresql-contrib-8.4软件包,然后该文件将位于/usr/share/postgresql/8.4/contrib/_int.sql(版本号可能不同)

如果你不想使用intarray contrib模块,或者你必须从不同类型的数组中删除重复,你还有另外两种方法

如果你至少有Postgresql 8.4,你可以利用unnest(anyarray)函数

SELECT ARRAY(SELECT disTINCT UNnesT('{1,1}'::int[]) ORDER BY 1);
 ?column? 
----------
 {1,3}
(1 row)

或者,你可以创建自己的函数来做到这一点

CREATE OR REPLACE FUNCTION array_sort_unique (ANYARRAY) RETURNS ANYARRAY
LANGUAGE sql
AS $body$
  SELECT ARRAY(
    SELECT disTINCT $1[s.i]
    FROM generate_series(array_lower($1,1),array_upper($1,1)) AS s(i)
    ORDER BY 1
  );
$body$;

这里是一个示例调用

SELECT array_sort_unique('{1,1}'::int[]);
 array_sort_unique 
-------------------
 {1,3}
(1 row)

原文地址:https://www.jb51.cc/postgresql/193634.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐