/*

創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元浦北做網(wǎng)站,已為上家服務(wù),為浦北各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
*根據(jù)某個(gè)字符拆分字符串
*/
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
AS
v_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);
/ 示范 /
SELECT * from table(splitstr('Hello,Cnblogs!',','));
拆分sql后:
select?
substr('Hello World',0,instr('Hello World','o')) as 首,
substr('Hello World',instr('Hello World','o')+1) as 尾
from dual;
有什么規(guī)定嗎?
“ABCDEFGH”或是“A,B,C,D,E,F(xiàn),G,H"
按符號(hào)拆分?按位置拆分?
substr()函數(shù):截取a-b之間的或a 。如:substr('Hello World',0,5)截取1-5或
substr('Hello World',0,instr('Hello World','o'))截取1-"o"的位置
1.如果是","等符號(hào):
select substr('Hello World',0,instr('Hello World','o')) ?from dual;
select substr('Hello World',instr('Hello World','o')+1) ?from dual;
或
select substr('Hello World',instr('Hello World','o')+1,length('Hello World')) ?from dual;
create or replace type strArray as table of varchar2(4020)
--此方法只能使用英文半角逗號(hào)(,)
create or replace function f_split(instr IN VARCHAR2) return strArray
as
l_tablen BINARY_INTEGER;
l_tab? ? DBMS_UTILITY.uncl_array;
l_ret strArray:=strArray();
BEGIN
DBMS_UTILITY.comma_to_table(instr, l_tablen, l_tab);
FOR i IN 1 .. l_tablen LOOP
l_ret.EXTEND(1);
l_ret(i):=l_tab(i);
END LOOP;
return l_ret;
END;
select t.column_value as value from table(f_split('a,b,付')) t;
create or replace type strArray as table of varchar2(4020)
CREATE OR REPLACE FUNCTION f_split(p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
? RETURN strArray IS
? TYPE ret_cur IS REF CURSOR;
? ret_cur1 ret_cur;
? g_str strarray:=strarray();
? l_sql varchar2(500):='';
BEGIN
? l_sql :='SELECT REGEXP_SUBSTR ('''||p_str||''',''[^'||p_delimiter||']+'',1,LEVEL) as valuesa
? ? ? ? ? ? FROM DUAL
? ? ? ? ? ? CONNECT BY REGEXP_SUBSTR ('''||p_str||''',''[^'||p_delimiter||']+'',1,LEVEL) IS NOT NULL';
OPEN ret_cur1 FOR l_sql ;
? FETCH ret_cur1 BULK COLLECT INTO g_str;
? CLOSE ret_cur1;
? RETURN g_str;
END f_split;
select * from table(f_split('abc$d$e$','$') );
(1)定義split_type類型:
CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (4000) /
(2)定義split函數(shù):
CREATE OR REPLACE FUNCTION split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN split_type IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000); my_split split_type := split_type (); BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE j len LOOP j := INSTR (p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR (p_str, i); my_split.EXTEND; my_split (my_split.COUNT) := str; IF i = len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); i := j + len1; my_split.EXTEND; my_split (my_split.COUNT) := str; END IF; END LOOP; RETURN my_split; END split; /
(3)存儲(chǔ)過(guò)程中,使用類似
For T In ( select a,b,c,d from table (split('1,2,3,4',',')) ) Loop
--注意下面的inserti語(yǔ)句,varchar類型的值需要補(bǔ)充引號(hào)上去
Execute Immediate ' insert into tableName set fieldName = '||T.a ;
Execute Immediate 'commit';
End Loop;
的查詢語(yǔ)句,把分開的結(jié)果拼成sql語(yǔ)句并寫入到表中。
第一種:oracle字符串分割和提取
分割
create or replace function Get_StrArrayLength
(
av_str varchar2, ?--要分割的字符串
av_split varchar2 ?--分隔符號(hào)
)
return number
is
lv_str varchar2(1000);
lv_length number;
begin
lv_str:=ltrim(rtrim(av_str));
lv_length:=0;
while instr(lv_str,av_split)0 loop
lv_length:=lv_length+1;
lv_str:=substr(lv_str,instr(lv_str,av_split)+length(av_split),length(lv_str));
end loop;
lv_length:=lv_length+1;
return lv_length;
end Get_StrArrayLength;
提取
create or replace function Get_StrArrayStrOfIndex
(
av_str varchar2, ?--要分割的字符串
av_split varchar2, ?--分隔符號(hào)
av_index number --取第幾個(gè)元素
)
return varchar2
is
lv_str varchar2(1024);
lv_strOfIndex varchar2(1024);
lv_length number;
begin
lv_str:=ltrim(rtrim(av_str));
lv_str:=concat(lv_str,av_split);
lv_length:=av_index;
if lv_length=0 then
lv_strOfIndex:=substr(lv_str,1,instr(lv_str,av_split)-length(av_split));
else
lv_length:=av_index+1;
lv_strOfIndex:=substr(lv_str,instr(lv_str,av_split,1,av_index)+length(av_split),instr(lv_str,av_split,1,lv_length)-instr(lv_str,av_split,1,av_index)-length(av_split));
end if;
return ?lv_strOfIndex;
end Get_StrArrayStrOfIndex;
直接使用拼接的方法來(lái)解決此問(wèn)題。
如下參考:
1.新的PHP文件,如下所示。
2.聲明數(shù)組變量,如下圖所示。
3.使用內(nèi)爆函數(shù)將數(shù)組連接到具有連接字符-的字符串中。
4.輸出連接后的字符串,如下圖所示。
5.預(yù)覽效果如圖所示。
6.用implode函數(shù)使數(shù)組拼接成字符串,連接符為?完成如下。
網(wǎng)站標(biāo)題:oracle怎么拆分字符,oracle拆分函數(shù)
URL鏈接:http://chinadenli.net/article10/hsghgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站內(nèi)鏈、電子商務(wù)、網(wǎng)站制作、建站公司、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)