2016-11-17 59 views
-2

在一列從JSON陣列獲取的名稱值說細節的值存儲爲:Postgres的:使用SELECT

[{"id":"key1","name":"Concerts \u0026amp; Tour Dates"},{"id":"key2","name":"Nightlife \u0026amp; Singles"}] 

列類型:文本

我需要獲得名逗號分隔值使用單個SELECT語句。還需要amp標誌。

結果: [音樂會&巡演日期,夜生活&單打]

+0

儘管可能使用SQL來解決這個問題(查找JSON函數和FOREACH),但使用任何外部編程語言(例如, '','。join([d ['name'] for d in]]'會完成Python中的大部分工作,並且轉義amp標記也很容易)。 –

+0

什麼都沒有... @Craig –

回答

2

這將做到這一點:

select string_agg(d.e ->> 'name', ',') 
from the_table, json_array_elements(that_text_column::json) as d(e); 

要改變&&使用替換功能:

select string_agg(replace(d.e ->> 'name','&', '&'), ',') 
from the_table, json_array_elements(that_text_column::json) as d(e); 

在線示例:http://rextester.com/XAPDTC62018

+0

是否可以使用:: select_id從the_table,json_array_elements(that_text_column :: json)作爲d(e)where(string_agg(替換(de - >>'name','&', '&'),',')&&('{test1,test2,test3}')) –

+0

@SyedAsadAbbasZaidi:'&&('{test1,test2,test3}'))''應該是什麼? –

+0

&&是匹配數組元素。我想要做的是匹配string_agg值與我預先定義的數組值。我知道我還需要在string_agg之後做string_to_array –