输入:
('{"user":{"status":1,"loginid":1,"userids":{"userid":"5,6"}}}')
我想这样插入到我的表中:
userid loginid status
---------------------------
5 1 1
6 1 1
答案 0 :(得分:1)
使用regexp_split_to_table().
假定列是整数:
with input_data(data) as (
values
('{"user":{"status":1,"loginid":1,"userids":{"userid":"5,6"}}}'::json)
)
-- insert into my_table(userid, loginid, status)
select
regexp_split_to_table(data->'user'->'userids'->>'userid', ',')::int as userid,
(data->'user'->>'loginid')::int as loginid,
(data->'user'->>'status')::int as status
from input_data
userid | loginid | status
--------+---------+--------
5 | 1 | 1
6 | 1 | 1
(2 rows)
答案 1 :(得分:0)
使用 array (JSON数组)开始会更简单。您可以使用json_array_elements_text(json)
。参见:
将{strong> 您拥有的列表 转换为包含string_to_array()
的数组。然后unnest()
。
SELECT unnest(string_to_array(js#>>'{user,userids,userid}', ',')) AS userid
, (js#>>'{user,loginid}')::int AS loginid
, (js#>>'{user,status}')::int AS status
FROM (
SELECT json '{"user":{"status":1,"loginid":1,"userids":{"userid":"5,6"}}}'
) i(js);
db <>提琴here
我建议在unnest()
列表中使用SELECT
的简单形式的Postgres 10或更高版本。参见:
我避免将regexp函数用于简单任务。这些功能强大,但价格昂贵得多。