oracle中translate與replace的使用

bfc99發表於2014-05-21

以下轉自:http://blog.csdn.net/optimist528/article/details/5648619 作者:optimist528

1.translate


  語法:TRANSLATE(char, from, to)
  
  用法:返回將出現在from中的每個字元替換為to中的相應字元以後的字串。
            若from比to字串長,那麼在from中比to中多出的字元將會被刪除。
            三個引數中有一個是空,返回值也將是空值。

  舉例:SQL> select translate('abcdefga','abc','wo') 返回值 from dual;
            返回值
            -------
            wodefgw

  分析:該語句要將'abcdefga'中的'abc'轉換為'wo',
            由於'abc'中'a'對應'wo'中的'w',
            故將'abcdefga'中的'a'全部轉換成'w';
            而'abc'中'b'對應'wo'中的'o',
            故將'abcdefga'中的'b'全部轉換成'o';
            'abc'中的'c'在'wo'中沒有與之對應的字元,
            故將'abcdefga'中的'c'全部刪除;

            簡單說來,就是將from中的字元轉換為to中與之位置對應的字元,
            若to中找不到與之對應的字元,返回值中的該字元將會被刪除。

            在實際的業務中,可以用來刪除一些異常資料,
            比如表a中的一個欄位t_no表示電話號碼,
            而電話號碼本身應該是一個由數字組成的字串,
            為了刪除那些含有非數字的異常資料,
            就用到了translate函式:
            SQL> delete from a,
                      where length(translate(trim(a.t_no), 
                                            '0123456789' || a.t_no,
                                            '0123456789')) <> length(trim(a.t_no));

若一個欄位含有字元和數字,比如說想要去掉其中的數字,可以這樣做:
select translate(column_name,'#0123456789','#') from table_name;
也可以這樣做:
select  replace(translate(column_name,'0123456789','#'),'#','') from table_name;


2.replace 
   
  語法:REPLACE(char, search_string,replacement_string)

  用法:將char中的字串search_string全部轉換為字串replacement_string。
        
  舉例:SQL> select REPLACE('fgsgswsgs', 'fk' ,'j') 返回值 from dual;
            返回值
            ---------
            fgsgswsgs
 
            SQL> select REPLACE('fgsgswsgs', 'sg' ,'eeerrrttt') 返回值 from dual;
            返回值
            -----------------------
            fgeeerrrtttsweeerrrttts

  分析:第一個例子中由於'fgsgswsgs'中沒有與'fk'匹配的字串,
            故返回值仍然是'fgsgswsgs';
            第二個例子中將'fgsgswsgs'中的字串'sg'全部轉換為'eeerrrttt'。


總結:綜上所述,replace與translate都是替代函式,
          只不過replace針對的是字串,而translate針對的是單個字元。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22207394/viewspace-1166455/,如需轉載,請註明出處,否則將追究法律責任。

相關文章