下列
SELECT ARRAY[a,b,c,d]
FROM ( VALUES
('foo', 'bar', 'foo', 'baz' )
) AS t(a,b,c,d);
Run Code Online (Sandbox Code Playgroud)
{foo,bar,foo,baz}类型的返回text[]。我想获得删除重复元素之一的{foo,bar,baz}类型?PostgreSQL 是否有一个独特的函数可以处理文本数组或of ?text[] baranyarrayanyelement
Eva*_*oll 21
虽然没有实现这一点的功能,但您可以使用
unnest() 将元素数组转换为一列的行表,DISTINCT 删除重复项ARRAY(query) 重新创建行。这个成语看起来像,
ARRAY( SELECT DISTINCT ... FROM unnest(arr) )
Run Code Online (Sandbox Code Playgroud)
在实践中是这样应用的,
SELECT ARRAY(SELECT DISTINCT e FROM unnest(ARRAY[a,b,c,d]) AS a(e))
FROM ( VALUES
('foo', 'bar', 'foo', 'baz' )
) AS t(a,b,c,d);
Run Code Online (Sandbox Code Playgroud)
如果你想要它排序,你可以做,
SELECT ARRAY(SELECT DISTINCT e FROM unnest(ARRAY[a,b,c,d]) AS a(e) ORDER BY e)
FROM ( VALUES
('foo', 'bar', 'foo', 'baz' )
) AS t(a,b,c,d);
Run Code Online (Sandbox Code Playgroud)
而这一切可以能写有CROSS JOIN LATERAL这多的清洁剂,
SELECT ARRAY(
SELECT DISTINCT e
FROM ( VALUES
('foo', 'bar', 'foo', 'baz' )
) AS t(a,b,c,d)
CROSS JOIN LATERAL unnest(ARRAY[a,b,c,d]) AS a(e)
-- ORDER BY e; -- if you want it sorted
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16601 次 |
| 最近记录: |