新聞中心
Oracle中怎樣用存儲過程將一段字符串以逗號為界截取,并將得到的子串存到另一張表中
--通過游標遍歷調(diào)用方法拆取存表:
創(chuàng)新互聯(lián)專注于東豐企業(yè)網(wǎng)站建設(shè),響應式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。東豐網(wǎng)站建設(shè)公司,為東豐等地區(qū)提供建站服務。全流程定制制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
--方法
create or replace function f_test_substr(
prm1 varchar2,??? --地
prm2 varchar2 ,?? --名稱
prm3 varchar2,??? --IP
prm4 varchar2??? --結(jié)果
)
return varchar2
as
v_n int:=0;? --第幾次取
v_l int;? --:截取次數(shù)
v_s varchar2(2000);? --處理拆分字符串
v_s1 varchar2(200);? --本次拆分
v_s2 varchar2(200);? --本次剩余
v_type varchar2(100);? --設(shè)備類型
v_code varchar2(100);? --設(shè)備編號
v_desc varchar2(100);? --設(shè)備描述
v_errmsg varchar2(200);
begin
v_l:=length(prm4)-length(replace(prm4,';',''));
v_s:=prm4||';';
v_s1:=substr(v_s,1,instr(v_s,';',1,1));
v_s2:=replace(v_s,v_s1,'');
while v_n=v_l loop
v_s2:=replace(v_s2,v_s1,'');
v_s1:=substr(v_s1,1,length(v_s1)-1);
v_type:=substr(v_s1,1,instr(v_s1,',',1,1)-1);
v_code:=substr(v_s1,instr(v_s1,',',1,1)+1,instr(v_s1,',',1,2)-instr(v_s1,',',1,1)-1);
v_desc:=substr(v_s1,instr(v_s1,',',1,2)+1,instr(v_s1||',',',',1,3)-instr(v_s1,',',1,2)-1);
insert into t_test_str(a,b,c,d,e,f) values(prm1,prm2,prm3,substr(v_type,instr(v_type,']',1)+1),v_code,v_desc);
v_n:=v_n+1;
v_s1:=substr(v_s2,1,instr(v_s2,';',1,1));
end loop;
commit;
return '成功';
exception
when others then
v_errmsg:=substr(sqlerrm,1,200);
return v_errmsg ;
end;
--存過
create or replace procedure p_test_substr1(o_result out varchar2)
as
v_a varchar2(20);
v_b varchar2(20);
v_c varchar2(20);
v_d varchar2(2000);
v_num int;
cursor c_str is
SELECT * from t_test_substr
;
begin
select count(1) into v_num from t_test_substr;
while v_num0 loop
open c_str;
loop
FETCH c_str INTO
v_a,v_b,v_c,v_d;
EXIT WHEN c_str%NOTFOUND;
o_result:=f_test_substr(v_a,v_b,v_c,v_d);
v_num:=v_num-1;
end loop;
CLOSE c_str;
end loop;
end;
效果見圖:
請問如何在Oracle中截取第一個逗號和第二個逗號之間的字符串
select substr('123,123456,123456789',
? ? ? ? instr('123,123456,123456789', ',', 1, 1) + 1,
? ? ? ? instr('123,123456,123456789', ',', 1, 2) -
? ? ? ? instr('123,123456,123456789', ',', 1, 1) - 1)
from dual;
Oracle語句怎么截取{和:之間的值?
如果字段存的就是這個,那么這個應該是字符串吧,那么就分幾步操作。
(1)定位,定位{和:的位置,從現(xiàn)在來看有兩種可能,第一種
這是兩個字段,分別是{12345:67:8}和{ABC:0:9},那就簡單了{肯定是1,所以這個也就不需要定位了,只需要定位第一個冒號的位置。
定位的函數(shù)應該是instr
第二種:{12345:67:8}{ABC:0:9}是一個字段的內(nèi)容,那就麻煩一些,不過也能做,希望不是這樣的,因為這個就要麻煩很多了。正則倒是能做,不過正則都要測試,我可沒有相應的環(huán)境做測試。這里也就不寫了,如果是這種,那么自己翻一翻正則函數(shù)的用法,應該能寫出來。
(2)截取,如果是第一種,那么定位了第一個冒號位置以后,用這個位置-2,也就是
instr(字段,':',1)-2這就是截取的長度,
從第二位開始截取,截取這個長度就可以substr(字段,2,instr(字段,':',1)-2)
這樣的話,{12345:67:8}換算到內(nèi)部就是substr({12345:67:8},2,5(7-2)),【7-2說明5的來源,第一個冒號在第7位】,截取出來就是12345
還是那句話,如果是第二種可能,那么就要找每一個{的位置,然后找在{后面距離最近的冒號的位置,然后再一個個的截取操作,正則應該可以操作,不過我還是那句話,需要測試,意思和這個截取函數(shù)差不多,自己好好理解一下應該就能操作了。
Oracle中怎樣將字段字符串以逗號為界截取,并將得到的子串通過函數(shù)解釋后再拼接成一個字段
001一定對應的是a嗎?002-b,003-c?
那就用REPLACE()
select?
replace(replace(replace('001,002,003','001','a'),'002','b'),'003','c')?
from?table
公司網(wǎng)絡受限,沒法傳圖了。。。
只能發(fā)一下了,測試的數(shù)據(jù)
select?replace(replace(replace('001,002,003','001','a'),'002','b'),'003','c')?from?dual
REPLACE(REPLACE(REPLACE('001,002,003','001','A'),'002','B'),'003','C')
a,b,c
oracle 數(shù)據(jù)怎么根據(jù)逗號截取數(shù)據(jù)
JS寫法根本沒有必要,你寫個存儲過程,把ID傳進去就可以了,用SUBSTR函數(shù),結(jié)合ORACLE中提供的正則表達式就可以完全可以搞定,
你可以去看看這個,可能對你有用,有用記得散分
網(wǎng)站標題:oracle怎么截取逗號,oracle截取括號內(nèi)容
本文來源:http://fisionsoft.com.cn/article/dsipegi.html