translate和replace的區別

來源:互聯網
上載者:User

translate和replace的區別

今天在Oracle資料庫中看到replace和translate的嵌套就有點糊塗了,於是就上網看了一下,感覺豁然開朗:

今天遇到的問題如下:

replace(TRANSLATE(a.deal_msg,'0123456789',' '),' ','') AS deal_msg ,

這隻是一條sql語句中的部分區段,什麼意思呢?就是將a.deal_msg欄位中出現的0和1替換為空白格,當然也包括將01替換為兩個空格,並將a.deal_msg中出現的23456789無論是連續還是單個數字均刪除,然後再將替換後的字串中的連續兩個空格替換為一個空格,為什麼會這樣呢?先看看translate和replace的規則吧!

一、translate:

TRANSLATE(CHAR,FROM,TO),將char中出現的from替換為to中相應的字元,如果from的長度大於to的長度,那麼將from大於to的長度之後的出現在char中的字元刪除。舉個簡單的例子:

select  translate('anhw','ang','A') from dual;

查詢結果:

---------

Ahw

結果分析:因為第三個參數的A和第二個參數的a位置對應,所以將第一個參數的a替換為A,又因為第二個參數的長度為3,第三個參數的長度為1,小於第二個參數2個長度,所以將出現在第一個參數中的n和g和ng刪除,由於anhw中有n,故將n刪除,因此結果為

Ahw.

二、replace

REPLACE(char, search_string,replacement_string),將char中出現的字串search_string全部替換為replacement_string字串。如果第二個參數在第一個參數中沒有那麼返回結果還是第一個參數的原字串,舉個簡單的例子:

select replace('anhw','ang','A') from dual;

查詢結果:

-----------

anhw

結果分析:由於ang在anhw沒有對應的連續字元,因此不會進行替換,返回原字串.

select replace('anhw','an','A') from dual;

查詢結果:

-----------

Ahw

結果分析:由於an在anhw字串中有對應的連續字元,因此將其替換為A,返回結果為Ahw.

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.