我在oracle中使用REPLACE函数来替换字符串中的值,如
SELECT REPLACE('THE NEW VALUE IS #VAL1#','#VAL1#','55') from dual
所以这可以替换一个值,但是20,应该使用20 REPLACE函数还是有更实用的解决方案。
欢迎所有的想法。
对于
how to replace multiple strings together in Oracle的接受答案建议使用嵌套的REPLACE语句,我不认为有更好的方法。
如果你要大量使用这个,你可以考虑编写自己的功能:
CREATE TYPE t_text IS TABLE OF VARCHAR2(256); CREATE FUNCTION multiple_replace( in_text IN VARCHAR2,in_old IN t_text,in_new IN t_text ) RETURN VARCHAR2 AS v_result VARCHAR2(32767); BEGIN IF( in_old.COUNT <> in_new.COUNT ) THEN RETURN in_text; END IF; v_result := in_text; FOR i IN 1 .. in_old.COUNT LOOP v_result := REPLACE( v_result,in_old(i),in_new(i) ); END LOOP; RETURN v_result; END;
然后使用它:
SELECT multiple_replace( 'This is #VAL1# with some #VAL2# to #VAL3#',NEW t_text( '#VAL1#','#VAL2#','#VAL3#' ),NEW t_text( 'text','tokens','replace' ) ) FROM dual
This is text with some tokens to replace
如果所有的令牌都具有相同的格式(‘#VAL’|| i ||’#’),那么可以省略参数in_old并使用循环计数器。