簡體   English   中英

如何在postgresql中逐行存儲逗號分隔值

[英]How to store comma-separated values row by row in postgresql

輸入:

('{"user":{"status":1,"loginid":1,"userids":{"userid":"5,6"}}}')  

我想像這樣插入到我的表中:

userid    loginid    status  
---------------------------
5            1         1      
6            1         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)    

使用數組(JSON 數組)開始會更簡單。 您可以使用json_array_elements_text(json) 看:

使用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<> 在這里擺弄

對於SELECT列表中帶有unnest()的簡單形式,我建議 Postgres 10 或更高版本。 看:

我避免在簡單任務中使用正則表達式函數。 這些功能強大,但要貴得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM