postgres:带数组

时间:2016-07-22 13:25:15

标签: postgresql

假设我们有一个包含下一个结构的文本的列:["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。

2 个答案:

答案 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对于简单的情况更快。