文章詳情頁
Oracle中分割字符串的方法實例代碼
瀏覽:176日期:2023-03-12 15:25:31
目錄
- 1. 使用 regexp_substr() 函數
- 1.1 方式1
- 1.2 方式2
- 1.3 注意問題(尤其是存儲過程中用到,可能會入坑)
- 2. 自定義函數
- 2.1 自定義類型 table
- 2.2 自定義函數
- 2.2.1 自定義函數
- 2.2.2 效果如下:
- 2.3 Oracle查看<Collection> 類型數據
- 總結
1. 使用 regexp_substr() 函數
1.1 方式1
如下:
select regexp_substr("bbb,aaa,ccc", "[^,]+", 1, level) as split_result from dualconnect by level <= length("bbb,aaa,ccc") - length(replace("bbb,aaa,ccc", ",")) + 1;
1.2 方式2
如下:
select regexp_substr(replace("aaa;bbb;ccb", "", ";"), "[^;]+", 1, level) as split_result from dual connect by level <= regexp_count("aaa;bb;", ";") + 1;
或者 with
寫法,如下
with temp as (select "bbb,aaa,ccc" as str from dual)select regexp_substr(replace(str, ",", " ,"), "[^,]+", 1, level) from tempconnect by level <= regexp_count(str, ",") + 1
1.3 注意問題(尤其是存儲過程中用到,可能會入坑)
問題情況(可能會出現空行),如下:
解決問題:
上述空行不是我們所需要的,所以排除即可,如下:
select split_result,length(split_result) from ( select regexp_substr(replace("aaa;bb;", "", ";"), "[^;]+", 1, level) as split_result from dual connect by level <= regexp_count("aaa;bb;", ";") + 1) where split_result is not null;
2. 自定義函數
2.1 自定義類型 table
如下:
create or replace type result_split_list as table of varchar2(100);
2.2 自定義函數
2.2.1 自定義函數
如下:
create or replace function split_strs(strs varchar2, type_split varchar2) return result_split_list pipelined is index_num pls_integer; str_list varchar2(100) := strs;begin loop index_num := instr(str_list, type_split); if index_num > 0 then pipe row(substr(str_list, 1, index_num - 1)); str_list := substr(str_list, index_num + length(type_split)); else pipe row(str_list); exit; end if; end loop; return;end split_strs;
2.2.2 效果如下:
如下:
2.3 Oracle查看<Collection> 類型數據
上面的效果我們看到查看到的是<Collection> 類型,不方便查看數據,處理如下:
select * from table (select split_strs("aaa,bbb,ccc",",") from dual);
總結
到此這篇關于Oracle中分割字符串的方法的文章就介紹到這了,更多相關Oracle分割字符串內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
Oracle
排行榜
