【发布时间】:2020-10-08 10:11:56
【问题描述】:
我有一列 item_id 包含 JSON(比如?)结构中的数据。
+----------+---------------------------------------------------------------------------------------------------------------------------------------+
| id | item_id |
+----------+---------------------------------------------------------------------------------------------------------------------------------------+
| 56711 | {itemID":["0530#2#1974","0538\/2#2#1974","0538\/3#2#1974","0538\/18#2#1974","0539#2#1974"]}" |
| 56712 | {itemID":["0138528#2#4221","0138529#2#4221","0138530#2#4221","0138539#2#4221","0118623\/2#2#4220"]}" |
| 56721 | {itemID":["2704\/1#1#1356"]}" |
| 56722 | {itemID":["0825\/2#2#3349","0840#2#3349","0844\/10#2#3349","0844\/11#2#3349","0844\/13#2#3349","0844\/14#2#3349","0844\/15#2#3349"]}" |
| 57638 | {itemID":["0161\/1#2#3364","0162\/1#2#3364","0163\/2#2#3364"]}" |
| 57638 | {itemID":["109#1#3364","110\/1#1#3364"]}" |
+----------+---------------------------------------------------------------------------------------------------------------------------------------+
我需要每个逗号之前的最后四位数字(如果有),最后 4 位数字被区分并分成单独的列。id 也应该发生不同的情况,因此只允许一个 id 为 57638 的结果行。
这是一个fiddle,其中的代码草稿没有给出正确的答案。 期望的结果应该是这样的:
+----------+-----------+-----------+
| id | item_id_1 | item_id_2 |
+----------+-----------+-----------+
| 56711 | 1974 | |
| 56712 | 4220 | 4221 |
| 56721 | 1356 | |
| 56722 | 3349 | |
| 57638 | 3364 | 3365 |
+----------+-----------+-----------+
结果中可能有很多 'item_id_%' 列。
【问题讨论】:
-
由于您无法动态选择列(您不知道 item_id_X 会有多少),我认为您应该使用 unpivot/pivot ,请参阅此处的示例stackoverflow.com/questions/14590859/…
标签: arrays json postgresql select postgresql-9.6