2017-08-10 60 views
0

在postgres中,我需要將列的輸出拆分爲多個列。Progres - 將查詢輸出拆分爲多列

查詢:

select id, response from table 

這是現在的輸出是什麼:

id |    response          | 
---+-----------------------------------------------------------+ 
1 |{u'vendor': u'can', u'unit': 40, u'zone': u'Asia'}   | 
2 |{u'vendor': u'bottle', u'unit': 15, u'zone': u'America'} | 
3 |{u'vendor': u'can', u'unit': 20, u'zone': u'South America'}| 

(3 rows) 

所需的輸出:

id | vendor | unit | zone   | 
----+---------+------+---------------+ 
    1 | can  | 40 | Asia   | 
    2 | bottle | 15 | America  | 
    3 | can  | 20 | South America |  

(3 rows) 

是否有可用於將字典鍵/值列值解析爲多列的語法/函數? 謝謝

回答

0

你在「響應」列中處理的內容看起來很像JSON哈希值,而「很多」我的意思是「它是」。事實證明,Postgres有辦法處理這樣的事情:

SELECT id, response->>'vendor' AS vendor, response->>'unit' AS unit, response->>'zone' AS zone FROM table; 

這應該在postgres 9.3和更高版本中工作。也就是說,它假設您的「響應」字段始終是JSON哈希,總是(至少)列出所有字段(它可能有更多),並且不能移植到其他SQL DB。

有關Postgres'JSON處理的更多信息,請參閱:https://www.postgresql.org/docs/9.6/static/functions-json.html