Progres - 将查询输出拆分为多个列

时间:2017-08-10 21:24:38

标签: postgresql parsing dictionary

在postgres中,我需要将列的输出拆分为多个列。

查询:

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)

我是否可以使用语法/函数将字典键/值列值解析为多列? 谢谢

1 个答案:

答案 0 :(得分:0)

您在“响应”列中处理的内容看起来很像JSON哈希......而且“很多”我的意思是“它是”。事实证明,Postgres有办法处理这些事情:

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

这应该适用于postgres 9.3及更高版本。也就是说,它假设你的“响应”字段始终是一个JSON哈希,总是(至少)列出所有字段(它可能有更多),并且不能移植到其他SQL数据库。

有关Postgres的JSON处理的更多信息,请参阅:https://www.postgresql.org/docs/9.6/static/functions-json.html