从下表
customer_id config_json
a5 {"required_capacity": true, "setup_wizard_completed": true, "cancelation_time_minutes": 0, "display_no_preference_in_booking": true}
b16 {"required_capacity": null, "setup_wizard_completed": true, "cancelation_time_minutes": 0, "display_no_preference_in_booking": true}
{"required_capacity": true, "cancelation_time_minutes": 0, "display_no_preference_in_booking": true}
我想把config_json列分成2列,如下所示
customer_id name value
a5 required_capacity true
a5 setup_wizard_completed true
...
b16 required_capacity null
代码的正则表达式部分目前看起来像这样:
REGEXP_REPLACE(split_part(mp.config_json,', ',s.id),'[{}": ]|(true|false||null)','')
然而,仍有一些保留,如:
customer_id name value
a5 cancelation_time_minutes0
b16 custom_sender_idadsd
因此,上面的公式不仅需要分割真、假或空,还需要分割数字或字符串。我如何修复这部分代码?您可以使用json_each()
:
select t.customer_id, config.key as name, config.value
from t cross join lateral
json_each(t.config_json::json) config;
这是一个db<>小提琴