第一種方式建立函式:
create or replace type str_split is table of varchar2 (4000);
create or replace function splitstr(p_string in varchar2, p_delimiter in varchar2)
return str_split
pipelined
asv_length number := length(p_string);
v_start number := 1;
v_index number;
begin
while(v_start <= v_length)
loop
v_index := instr(p_string, p_delimiter, v_start);
if v_index = 0
then
pipe row(substr(p_string, v_start));
v_start := v_length + 1;
else
pipe row(substr(p_string, v_start, v_index - v_start));
v_start := v_index + 1;
end if;
end loop;
return;
end splitstr;
第二種:sql解決
select dbms_lob.substr(regexp_substr('abc,def,ggg,1,2,3,4,5', '[^,]+', 1, x.n)) as player_guid
from dual a, (select rownum n from dual connect by rownum < 100) x
這裡利用了函式 regexp_substr和connect by
其中rownum < 100 會連線限制split的次數 '[^,]+'為split拆分的正規表示式,這裡為【,】逗號
上面sql語句結果是:
abcdef
ggg123
45
regexp_substr函式格式如下:
function regexp_substr(string, pattern, position, occurrence, modifier)
__srcstr :需要進行正則處理的字串
__pattern :進行匹配的正規表示式
__position :起始位置,從第幾個字元開始正規表示式匹配(預設為1)
__occurrence :標識第幾個匹配組,預設為1
__modifier :模式('i'不區分大小寫進行檢索;'c'區分大小寫進行檢索。預設為'c'。)
第三種:
查詢使用正則分割後的第乙個值,也就是17
[sql]
select regexp_substr('17,20,23','[^,]+',1,1,'i') as str from dual;
結果: www.2cto.com
str-----
17獲取乙個多個數值的列,從而能夠讓結果以多行的形式展示出來
[sql]
select level from dual connect by level <=7;
結果: www.2cto.com
level
----12
3456
7將上面regexp_substr的occurrence關聯
[sql]
select nvl(regexp_substr('17,20,23', '[^,]+', 1, level, 'i'), 'nulll') as str
from dual
connect by level <= 7;
str www.2cto.com
----
1720
23null
null
null
null
優化上面的sql語句,讓生成的行的數量符合實際情況
[sql]
select regexp_substr('17,20,23', '[^,]+', 1, level, 'i') as str
from dual
connect by level <=
length('17,20,23') - length(regexp_replace('17,20,23', ',', ''))+1;
str----
1720
23
Oracle 字串分割 Split
一 建立陣列型別 sql create orreplace type t ret table is table of varchar2 512 二 建立字串分割函式 sql create orreplace function f split string as str varchar2,as spl...
Oracle字串分割Split
一 建立陣列型別 sql create orreplace type t ret table is table of nvarchar2 1000 二 建立字串分割函式 sql create or replace function f split string as str nvarchar2,as...
Oracle 字串分割 Split
廢話不多說直接上 一 建立陣列型別 create or replace type t ret table is table of varchar2 512 二 建立字串分割函式 create or replace function f split string as str varchar2,as ...