项目中有一个计算式B1+B2+B3+B4+B5+B6+B7+B8+B9+B10+B11+B12+B13+B14+B15+B16
我使用replace('B1+B2+B3+B4+B5+B6+B7+B8+B9+B10+B11+B12+B13+B14+B15+B16','B1',88)但是REPLACE函数同时也将B10+B11+B12+B13+B14+B15+B16中B1替换了,我想实现是只替换B1这个变量,因为其他变量对应有相应的数字!请问大家怎么实现我想要功能!
replace('B1+B2+B3+B4+B5+B6+B7+B8+B9+B10+B11+B12+B13+B14+B15+B16','B1+','88+')
简单做字符串替换时要当心。
非正则的目标字符串比较难以控制开头和结尾。
比如
B1111+
B1+
不一样,用B1替换,会出错
AB111+,CB11+,B11+不一样,用B11+搜索替换会出错。
我一般都是将分隔符也作为 查询字串 的一部分,避免错误。
例如,搜索字符串为 +B1+
不过,这样就要求 被替换的字符串开头和结尾都要有分隔符
+B12+B3232+B23423+
当然,每段开头字符都固定单个字符的话,可以省略头间隔符。
例如,都是一个B开头。
这个可以看下
http://www.cnblogs.com/lzhdim/archive/2008/12/24/1361388.html
我说一个笨方法:
test_str:='B1+B2+B12-B14*b5';
test_str:=replace(test_str,'+',' + ');
test_str:=replace(test_str,'-',' + ');
test_str:=replace(test_str,'*',' + ');
test_str:=' '||test_str;
dbms_output.put_line(test_str);
test_str:=replace(test_str,' '||'B1'||' ','88');
test_str:=replace(test_str,' ');
dbms_output.put_line(test_str);
思路就是:把你所有的运算符都在前后加一个空格(这里一般只有4个运算符吧,如果还有括号什么的再想办法,反正就是尽量把运算符前后都放一个相同的特殊字符,这里是空格),然后把字符串最前面加一个空格,然后再把' '||'B1'||' '都替换成88,最后再把所有的空格都换成空replace(string,' ')可以实现把所有的' '都换成空。大功告成,希望能帮到楼主
前后拼接“+”
替换 “+B1+”