在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)
我是否可以使用语法/函数将字典键/值列值解析为多列? 谢谢
答案 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