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

2021-08-31 09:17:57 字數 1362 閱讀 6161

最近遇到乙個問題,需要把乙個帶有,的字串拆分成多列。通過查詢資料,這個操作需要使用以下2個關鍵知識:

1. regexp_substr函式

這個函式的作用是正則分隔字串,用法為

function regexp_substr(string, pattern, position, occurrence, modifier)

__srcstr     :需要進行正則處理的字串

__pattern    :進行匹配的正規表示式

__position   :起始位置,從第幾個字元開始正規表示式匹配(預設為1)

__occurrence :標識第幾個匹配組,預設為1

__modifier   :模式('i'不區分大小寫進行檢索;'c'區分大小寫進行檢索。預設為'c'。)

舉幾個例子說明下這個函式的用法:

select regexp_substr('1,2,3','[^,]+',1,1) result from dual;

執行結果:

select regexp_substr('1,2,3','[^,]+',1,2) result from dual;

執行結果:

可見occurrence引數用來指定要提取第幾個匹配到的資料。以字串'1,2,3'為例,這個引數分別要為1,2,3。

2.為了實現動態引數,使用 connect by

舉個例子:

select rownum from dual connect by rownum<=7;

執行結果:

可見通過connect by可以構造連續的值

3.字串中逗號的數量是不確定的,如果有2個逗號,需要提取的字段就是3個。為了確定有多少個需要提取的字段,使用regexp_replace函式

舉個列子:

select regexp_replace('1,2,3',',','') from dual;

執行結果:

可見執行正則替換後,字串中的,被刪除了。通過原字串長度和被替換後字串長度相減,可以得到原字串中的逗號數量,加1後得到需要提取的匹配字段數量

最終的語句為:

select regexp_substr ('1,2,3', '[^,]+', 1,rownum)

from dual connect by rownum<=length ('1,2,3') - length (regexp_replace('1,2,3', ',', ''))+1;

執行結果:

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

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

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

構建測試表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...

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

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