状态:[{"可见":true,"状态":1},{"可见":假,"状态":2},{"可见":true,"状态":2}]新状态:[{"可见"(_V):true,"状态":1},{"可见":true,"状态":2}]SELECT json_each(状态)FROM订单;
xwbd5t1u1#
备选办法1
select json_agg(jsondata) from json_array_elements('[{"is_visible": true,"status": 1}, {"is_visible": false, "status": 2},{"is_visible": true,"status": 2}]'::json) t1(jsondata) where t1.jsondata->>'is_visible' = 'true' -- RESULT: [{"is_visible": true,"status": 1}, {"is_visible": true,"status": 2}]
备选办法2
with t1 (id, jsondata) as ( select 1, '[{"is_visible": true,"status": 1},{"is_visible": false, "status": 2},{"is_visible": true,"status": 2}]'::json union all select 2, '[{"is_visible": true,"status": 3},{"is_visible": false, "status": 4},{"is_visible": false,"status": 5}]'::json ) select t1.id, json_agg(t2.val) from t1 cross join json_array_elements(t1.jsondata) t2(val) where t2.val->>'is_visible' = 'true' group by t1.id -- RESULT: id | json_agg | ---+----------------------------------------------------------------------+ 1 | [{"is_visible": true,"status": 1}, {"is_visible": true,"status": 2}] | 2 | [{"is_visible": true,"status": 3}] |
1条答案
按热度按时间xwbd5t1u1#
备选办法1
备选办法2