oracle 中對查詢出來的數據進行切割、截取等操作


oracle 中對查詢出來的數據進行切割、截取等操作

 

最近遇到一個問題,需要把一個帶有,的字符串拆分成多行。通過查詢資料,這個操作需要使用以下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;

執行結果:

 


 


免責聲明!

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



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