oracle sql 逗號 分割 REGEXP_SUBSTR 函數


1.REGEXP_SUBSTR函數.

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

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

參數說明:
參數1:string-待分割字符串;
參數2:pattern-正則表達式;
參數3:position-起始位置,從第幾個字符開始正則表達式匹配(默認為1);
參數4:occurrence-標識第幾個匹配組,默認為1;

參數5:modifier-模式('i'不區分大小寫進行檢索,'c'區分大小寫進行檢索,默認為'c'.);

1.分割字符串中所有的逗號,然后成多行.

select regexp_substr(q.nums, '[^,]+', 1, rownum,'i'), names

from (select '1,2,3' nums, '張三' names from dual) q
connect by rownum <= LENGTH(q.nums) - LENGTH(REGEXP_REPLACE(q.nums, ',', '')) + 1;

執行結果:

1.my sql code:

SELECT test.AUDITED_UNIT, REGEXP_SUBSTR(test.AUDITED_UNIT, '[^,]+', 1, ROWNUM)
FROM (SELECT AUDITED_UNIT FROM AUDIT_PROJECT_APPROVED WHERE APPROVED_ID='3345463') test
CONNECT BY ROWNUM<=LENGTH(test.AUDITED_UNIT)-LENGTH(regexp_replace(test.AUDITED_UNIT, ',', ''))+1;

執行結果:

1.舉幾個例子說明下這個函數的用法:

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;
執行結果:

3.字符串中逗號的數量是不確定的,如果有2個逗號,需要提取的字段就是3個.

為了確定有多少個需要提取的字段,使用regexp_replace函數.

舉個列子:

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

執行結果:

 

4.可見執行正則替換后,字符串中的','被刪除了.通過原字符串長度和被替換后字符串長度相減,可以得到原字符串中的逗號數量,加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;
執行結果:
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM