条件假设如我上条回贴: declare v_str varchar2(40); v_str varchar2(40); v_num int; begin v_num = 0; select t.a into v_str from table t; if(ascii(substr(v_str,v_num,1))>48 and ascii(substr(v_str,v_num,1))<57 and ascii(substr(v_str,v_num+1,1))>48 and ascii(substr(v_str,v_num+1,1))<57)) then v_str2 = replace(v_str,substr(v_str,v_num,1),'3'|| substr(v_str,v_num,1)); update t.a set t.a = v_str2 where ascii(substr(v_str,v_num,1))>48 and ascii(substr(v_str,v_num,1))<57 and ascii(substr(v_str,v_num+1,1))>48 and ascii(substr(v_str,v_num+1,1))<57) endif end 其如果是有多条记录要操作,可以用游标,楼主试试看吧!
declare
v_str varchar2(40);
v_str varchar2(40);
v_num int;
begin
v_num = 0;
select t.a into v_str from table t;
if(ascii(substr(v_str,v_num,1))>48 and ascii(substr(v_str,v_num,1))<57 and ascii(substr(v_str,v_num+1,1))>48 and ascii(substr(v_str,v_num+1,1))<57))
then
v_str2 = replace(v_str,substr(v_str,v_num,1),'3'|| substr(v_str,v_num,1));
update t.a set t.a = v_str2 where ascii(substr(v_str,v_num,1))>48 and ascii(substr(v_str,v_num,1))<57 and ascii(substr(v_str,v_num+1,1))>48 and ascii(substr(v_str,v_num+1,1))<57)
endif
end
其如果是有多条记录要操作,可以用游标,楼主试试看吧!
以上的代码可以使用instr()函数替换掉一部分.
string 希望被替换的字符或变量
s1 被替换的字符串
s2 要替换的字符串好像还是有问题,因为你无法判断后面的一个'
select substr(str,
1,
instr(str, '''', 1, 1) - 1) || '3' ||
substr(str,
instr(str, '''', 1, 1),
instr(str, '''', 1, 2) -
instr(str, '''', 1, 1)) || '3' ||
substr(str,
instr(str, '''', 1, 3),
length(str))
from dual