[英]Split a column into multiple rows based on multiple delimiters in Postgres
[英]Replace brackets and splitting a column into multiple rows based on a delimiter in Postgres
我有一個表,列用';'分隔。 數據如下所示:
row_id col
1 p.[D389R;D393_W394delinsRD]
2 p.[D390R;D393_W394delinsRD]
3 p.D389R
4. p.[D370R;D393_W394delinsRD]
我想替換 '[]' 括號並獲取文本。 后來,我想將字符串拆分為 ';' 並連接 'p.' 到拆分的文本(如果它不存在)並創建一個新行。
預期的輸出是:
row_id new_col
1 p.D389R
2 p.D393_W394delinsRD
3 p.D390R
4 p.D393_W394delinsRD
5 p.D389R
6 p.D370R
7 p.D393_W394delinsRD
我試過下面的查詢來獲得所需的輸出。
SELECT *,
CASE
WHEN regexp_split_to_table(regexp_replace(col, '\[|\]', '', 'g'), E';') NOT LIKE 'p.[%'
THEN 'p.' || (regexp_split_to_table(regexp_replace(col, '\[|\]', '', 'g'), E';'))[1]
ELSE regexp_split_to_table(regexp_replace(col, '\[|\]', '', 'g'), E';')[2]
END AS new_col
FROM table;
任何建議都會非常有幫助。
我會首先從字符串中刪除常量值( p.[
和]
),然后取消嵌套。
with clean as (
select row_id, regexp_replace(col, '^p\.(\[){0,1}|\]$', '', 'g') as col
from the_table
)
select row_id, 'p.'|| t.c
from clean c
cross join unnest(string_to_array(c.col, ';')) as t(c)
CTE( with ...
)並不是必需的,但這樣unnest(...)
保持可讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.