Oracle 分割字串

2021-09-02 12:47:37 字數 2391 閱讀 2016

第一種方式建立函式:

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 ...