实际数据处理时,字段值中含有 tab 符和换行符 时,需要将其替换掉。
现在使用多次嵌套 replace 进行处理,
select replace(replace(t.notes,chr(9)),chr(10)) from table_name t;但由于源表数据量很大,对系统性能影响较大,现打算一次替换操作将其实现,求妙招!!貌似可以使用正则表达式函数 regexp_replace 实现??

解决方案 »

  1.   

    select translate(notes,chr(9)||chr(10),'') from table_name;
      

  2.   


    SELECT REGEXP_REPLACE('test'||chr(9)||chr(10),'\s*$','') || 'test2' from dual;
      

  3.   


    declare
     s varchar2(100):='hello'||chr(9)||'world'||chr(10)||'Tom';
    begin
     dbms_output.put_line(s);
     dbms_output.put_line('replace:');
     dbms_output.put_line(replace(replace(s,chr(10),'+'),chr(9),'+'));
     dbms_output.put_line('trnslate:');
     dbms_output.put_line(translate(s,chr(9)||chr(10),'-'));
     dbms_output.put_line('regexp_replace:');
     dbms_output.put_line(regexp_replace(s,'['||chr(9)||chr(10)||']+','_'));
    end;
    /
      

  4.   

    谢谢大家的提示,最终选择以下两种方式:select 
      translate(t.notes,'#'||chr(9)||chr(10),'#'),
      regexp_replace(t.notes,'['||chr(9)||chr(10)||']','')
    from table_name t;translate 是以字符为单位进行提取、替换的,需注意对于汉字的匹配和字符集的设置有关,其用法需再研究