2016-07-22 58 views
0

假設我們有一個與下一個結構的文本列:["A", "B", "C"], 如何連接它與數組ARRAY['A','C','D','E']併產生字符串["A", "B", "C", "D", "E"](字符串沒有重複的元素)?postgres:連接字符串與數組

postgres的版本是9.4.8

列的數據可以是["A", "B", "C"]或空時,如何將其與ARRAY['A','C','D','E']級聯(實際上它可以是一個字符串,但我需要添加元素,以現有的字符串不重複它們) ,生成的字符串必須具有以下模式["A", "B", "C", "D", "E"]

通過腳本解決,該備用數據庫通過pdo。

+0

請在你的例子中解釋雙引號的作用。 –

+0

@ErwinBrandstetter @ErwinBrandstetter他們已經存在於數據庫和存儲設置,由應用程序解析,我想用一個新的,從問題中描述的算法構造一個新的字符串替換現有的字符串。 – helios

+0

新字符串中是否還需要雙引號?可能的實際字符串是什麼樣的?他們可以在字符串內加雙引號嗎?他們*總是*大寫?將所有的定義信息放入問題中,並且請始終聲明您的Postgres版本。 –

回答

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

變換的串到另一個數組,UNNEST兩者並採取兩個的有序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是簡單的情況下更快。