原串:A01/A02/A03/A04/A05/A06/A07/A08/A09/A10如果原串中 A02 A04 A05 是不符合规定的,要替换成 A99, 这样原串就变成: A01/A99/A03/A99/A99/A06/A07/A08/A09/A10原串比较长,用replace比较麻烦,请问有什么好办法吗?

解决方案 »

  1.   

     -- 参考下
    SQL> select regexp_replace('A01/A02/A03/A04/A05/A06/A07/A08/A09/A10','(A02)|(A04)|(A05)','A99') NEW_CHAR from dual;NEW_CHAR
    ---------------------------------------
    A01/A99/A03/A99/A99/A06/A07/A08/A09/A10SQL> 
      

  2.   

    原串中 A02 A04 A05 是不符合规定的
    有什么规律?
      

  3.   

    除了用replace,想不出什么更好的办法
    为什么replace函数不用呢
      

  4.   

    没有规律,用replace得很多层嵌套吧,不符合规定的数据可能几十个,这样句子就太长了。
      

  5.   

    replace(replace(replace(str,'A02 ','A99'),'A04','A99'),'A05','A99')这样麻烦么?
      

  6.   

    因为不符合规定的数据可能是:A02 A04 A05.................A66几十个这么多,所以用replace会麻烦
      

  7.   

    regexp_replace函数不错,不过要10G才行,低于10G就用replace吧
      

  8.   

    怕长的话,你可以写一个function啊,但是replace必须要用到的.
      

  9.   

    因为一个replace只能替换一次,所以在函数里用FOR循环产生反复的replace。例如:如果有3个"A02 A04 A05",用函数产生3个replace.
      

  10.   


    A02 A04 A05.................A66 如果是04-66都需要换就可以写,如果不是那另外解决!