数据库中有个字段里面包含<input type='text' name='answer_4727' class='input2' size='10' style='text-align:center'/> 数据类似这样:<input type='text' name='answer_4727' class='input2' size='10' style='text-align:center'/>是会计的基本方法。其中answer_4727 这串不一样 例如 另一条是这样:可比性原则必须建立在<input type='text' name='answer_4729' class='input2' size='10' style='text-align:center'/>原则的基础上,以保证会计信息的真实、可靠。现在想把 包括尖括号 中间所有的 替换成 三个百分号 不知道怎么搞 求高手帮忙 先致谢 致谢 致谢 致谢
select '<input type=''text'' name=''answer_4727'' class=''input2'' size=''10'' style=''text-align:center''/>是会计的基本方法' contents from dual
union all
select '可比性原则必须建立在<input type=''text'' name=''answer_4729'' class=''input2'' size=''10'' style=''text-align:center''/>原则的基础上,以保证会计信息的真实、可靠。' from dual
)
select regexp_replace(contents,'<[^<>]+>','%%%') contents from t;
/*
%%%是会计的基本方法
可比性原则必须建立在%%%原则的基础上,以保证会计信息的真实、可靠。
*/
目前用别的法子解决问题了 但是这个还是希望知道在oralce9里 有什么法子么?
with t as(
select '<input type=''text'' name=''answer_4727'' class=''input2'' size=''10'' style=''text-align:center''/>是会计的基本方法' s from dual
union all
select '可比性原则必须建立在<input type=''text'' name=''answer_4729'' class=''input2'' size=''10'' style=''text-align:center''/>原则的基础上,以保证会计信息的真实、可靠。' from dual
)
select substr(s,1,instr(s,'<')-1)||'%%%'||substr(s,instr(s,'/>')+2) from t;-- 如果字符串中有多个 <.../>,可以用函数
create or replace function stuff (str varchar2)
return varchar2
is
s varchar2(32678);
sp number;
ep number;
begin
s:=str;
loop
sp:=instr(s,'<'); ep:=instr(s,'/>');
exit when sp=0 or ep=0;
s:=substr(s,1,sp-1)||'%%%'||substr(s,ep+2);
end loop;
return s;
end;
/