oracle如何拆分以逗號分隔的字串為多行

2021-09-26 04:49:11 字數 1462 閱讀 1865

---構建測試表t如下:

---需求:依據上表中y欄位的值,將一行記錄拆分為多行,並達到如下效果

--方法1---  

with t as (

select 'a1' x, 'a,b,c,d' y   from dual

union all

select 'a2' x, 'e,f,g' y from dual

)select  y,  regexp_substr(y||',', '[^,]+', 1, rownum) yy

from (select  y from  t 

where y like '%,%'

) connect by rownum <= length(y) - length(replace(y, ',', ''))+1

該語句的執行結果如下:

注:當t表中只有一條資料需要拆分時,上述寫法適用。但是,因為示例的t表中有多行記錄,第二條以及之後的行拆分的資料就不對了。原因是從第2行記錄開始,y欄位的資料不是從第1個逗號開始拆的,而是第n行(n=從上一行拆分完成後的"行號")開始拆,這樣如果第一行的逗號數(即拆分的行數)如果沒有超過第二行的逗號數,那麼第二行資料拆出的條數就會少,而如果第一行拆分行數多於第二行的逗號數,那麼第二行的拆分結果就只能返回為null了,第三行、第四行及之後的資料,同理……(不贅述)。

-----方法2:(可解決上述問題)

with t as (

select 'a1' x, 'a,b,c,d' y   from dual

union all

select 'a2' x, 'e,f,g' y from dual

)select y, regexp_substr(y, '[^,]+', 1, level) yy

from t 

where instr(y, ',') > 0

connect by level <= regexp_count(y, ',') + 1 --oracle11g以上版本可用

and y = prior y

and prior dbms_random.value is not null

執行結果如下:

oracle如何拆分以逗號分隔的字串為多行

最近遇到乙個問題,需要把乙個帶有,的字串拆分成多行。通過查詢資料,這個操作需要使用以下2個關鍵知識 1.regexp substr函式 這個函式的作用是正則分隔字串,用法為 function regexp substr string,pattern,position,occurrence,modif...

oracle如何拆分以逗號分隔的字串為多列

最近遇到乙個問題,需要把乙個帶有,的字串拆分成多列。通過查詢資料,這個操作需要使用以下2個關鍵知識 1.regexp substr函式 這個函式的作用是正則分隔字串,用法為 function regexp substr string,pattern,position,occurrence,modif...

mysql 當字段以逗號分隔時的轉換

當乙個欄位裡的資料是以逗號分隔時,利用group concat str 函式以及substring index 函式,將其資料直接轉換成以逗號相隔的字串 記錄sql如下 select s.id,group concat d.dict name dict name from sys data dict...