假设我们有一个包含下一个结构的文本的列:["A", "B", "C"]
,
如何用数组ARRAY['A','C','D','E']
连接它并生成字符串["A", "B", "C", "D", "E"]
(没有重复元素的字符串)?
postgres版本是9.4.8
列数据可以是["A", "B", "C"]
或null,它如何与ARRAY['A','C','D','E']
连接(实际上它可以是一个字符串,但我需要将元素添加到现有字符串而不重复它们),结果字符串必须具有以下模式["A", "B", "C", "D", "E"]
通过脚本解决,通过pdo替换db。
答案 0 :(得分:1)
SELECT array_agg(x) FROM
(SELECT * FROM unnest(ARRAY['A', 'B', 'C'])
UNION
SELECT * FROM unnest(ARRAY['A','C','D','E'])
) a(x);
┌─────────────┐
│ array_agg │
├─────────────┤
│ {D,B,E,C,A} │
└─────────────┘
(1 row)
答案 1 :(得分:1)
将字符串转换为另一个数组,取消两者并取两者的有序UNION
以形成新数组:
SELECT ARRAY(
SELECT * FROM unnest(ARRAY['A','C','D','E'])
UNION
SELECT * FROM unnest(string_to_array(translate('["A", "B", "C"]', '[]"', ''), ', '))
ORDER BY 1
);
我删除了字符[]"
以继续处理简单案例。你需要解释为什么你有他们/需要他们......
ARRAY constructor对于简单的情况更快。