日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 根据分隔符提取,oracle根据分隔符获取字符串

發布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 根据分隔符提取,oracle根据分隔符获取字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境:11g

-- +表示對多個非,分組

select

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^][,]+', 1, 1) t1,

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^][,]+', 1, 2) t2,

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^][,]+', 1, 3) t3,

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^][,]+', 1, 4) t4,

--等價

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^,]+', 1, 1) e1,

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^,]+', 1, 2) e2,

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^,]+', 1, 3) e3,

regexp_substr('annn,bnn哈,cqwe,d哈哈', '[^,]+', 1, 4) e4

from dual;

如果你想直接輸出為列:

select REGEXP_SUBSTR('01#02#03#04', '[^#]+', 1, rownum) as newport

from dual connect by rownum <= regexp_count('01#02#03#04','#')+1;

--如果要取指定[]范圍的數據怎么取?

select rtrim(regexp_substr('xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj', '[^[]+]',1,1),']'),

regexp_substr('xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj', '[^[]+\)', 1, 2),

regexp_substr('xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj', '[^[]+]', 1, 3),

regexp_substr('xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj', '[^[]+]', 1, 4),

regexp_count('xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj','\[')

from dual;

這里可以寫成一個函數:

--三個入參,一個是左符號,一個右符號,一個拼接符

--出參,返回值指定符號拼接的字符串

create or replace function get_range_sign_str(p_left_sign varchar2,p_right_sign varchar2,p_text varchar2,p_str varchar2 default ',')

return varchar2 is

v_temp varchar2(4000);

v_count pls_integer :=0;

begin

if p_left_sign is null or p_right_sign is null or p_text is null then

return null;

end if;

--獲取分組次數

select regexp_count(p_text,'\'||p_left_sign) into v_count from dual;

for x in 1.. v_count loop

v_temp:=v_temp|| rtrim(regexp_substr(p_text, '[^'||p_left_sign||']+\'||p_right_sign,1,x),'\'||p_right_sign)||p_str;

end loop;

return rtrim(v_temp,p_str);

end;

--測試

select get_range_sign_str('(',')','xxxx(aaa)yrwer(bb)tttt(ccc)(dd)jjj') from dual;

select get_range_sign_str('[',']','xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj') from dual;

--如果你不想拼接,想直接返回一個table值的話

create or replace type v_tab_type is table of varchar2(4000);

create or replace function get_range_sign_table(p_left_sign varchar2,p_right_sign varchar2,p_text varchar2)

return v_tab_type pipelined

is

v_temp varchar2(4000);

v_count pls_integer:=0;

begin

if p_left_sign is null or p_right_sign is null or p_text is null then

return ;

end if;

--獲取分組次數

select regexp_count(p_text,'\'||p_left_sign) into v_count from dual;

for x in 1.. v_count loop

v_temp:= rtrim(regexp_substr(p_text, '[^'||p_left_sign||']+\'||p_right_sign,1,x),'\'||p_right_sign);

--dbms_lock.sleep(1);

pipe row(v_temp);

end loop;

return;

end;

--測試

select * from table(get_range_sign_table('(',')','xxxx(aaa)yrwer(bb)tttt(ccc)(dd)jjj')) ;

select * from table(get_range_sign_table('[',']','xxxx[aaa]yrwer[bb]tttt[ccc][dd]jjj')) ;

--如果編譯報錯: 必須聲明標識符 'SYS.DBMS_LOCK'

--則需要授權

grant execute on dbms_lock to scott;

總結

以上是生活随笔為你收集整理的oracle 根据分隔符提取,oracle根据分隔符获取字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。