我有一个表,它有一列是由创建的
json_object_agg(eventid,date_now_range) eventids_range
这就是存储在表中的数据的样子
{ "527813" : 184, "525947" : 133, "529957" : 178, "531490" : 143 }
我想选择这个记录,并将密钥和值作为自己的记录
所以这个
select eventids_range from special_event_conflicts
会退回类似这个的东西吗
col a col b
527813 184
525947 133
529957 178
531490 143
这里有一个选项:
select k.cola, v.colb
from mytable t
cross join lateral json_object_keys(t.eventids_range) as k(cola)
cross join lateral json_extract_path_text(t.eventids_range, k.cola) v(colb)
这是通过首先使用json_object_keys()
从对象中提取密钥,然后使用json_extract_path_text()
访问相应的值来实现的。
DB Fiddle上的演示:
可乐:-----|:---527813 | 184525947 | 133529957|178531490 | 143
另一个可能更好的解决方案是使用json_each()
:
select x.cola, x.colb
from mytable t
cross join lateral json_each(t.eventids_range) as x(cola, colb)
DB Fiddle演示