replace 和TRANSLATE 函式的對比

2021-06-22 08:34:56 字數 3292 閱讀 9273

translate(string,from_str,to_str) 

返回將(所有出現的)from_str中的每個字元替換為to_str中的相應字元以後的string。translate 是 replace 所提供的功能的乙個超集。如果 from_str 比 to_str 長,那麼在 from_str 中而不在 to_str 中的額外字元將從 string 中被刪除,因為它們沒有相應的替換字元。to_str 不能為空。oracle 將空字串解釋為 null,並且如果translate 中的任何引數為null,那麼結果也是 null。 

replace 字串級別的代替

如:select replace('accd','cd','ef') from dual; --> aefd

translate 字元級別的代替

如:select translate('acdd','cd','ef') from dual; -->aeff

replace:

sql> select replace('abcdefghij','abcdef','123456') from dual;

replace('a

----------

123456ghij

sql> select replace('abcbbaadef','ba','#@') from dual;

replace('a

----------

abcb#@adef

sql> select replace('abcbbaadef','bad','#@') from dual;

replace('a

----------

abcbbaadef

sql> select replace('abcdefghij','abcdef','123456') from dual;

replace('a

----------

123456ghij

sql> select replace('abcbbaadef','ba','#@') from dual;

replace('a

----------

abcb#@adef

sql> select replace('abcbbaadef','bad','#@') from dual;

replace('a

----------

abcbbaadef

translate:

sql> select translate('abcdefghij','abcdef','123456') from dual;

translate(

----------

123456ghij

sql> select translate('abcbbaadef','ba','#@') from dual;

translate(

----------

@#c##@@def

(b將被#替代,a將被@替代)

expr: 代表一串字元,from 與 to 是從左到右一一對應的關係,如果不能對應,則視為空值

sql> select translate('abcbbaadef','bad','#@') from dual;

translate

---------

@#c##@@ef

(b將被#替代,a將被@替代,d對應的值是空值,將被移走)

比較特殊點的translate

將數字轉換為9,其他的大寫字母轉換為x,然後返回。

sql> select translate('2krw229','0123456789abcdefghijklmnopqrstuvwxyz','9999999999************************xx') aa from dual

2 ;

aa -------

9***999

將數字保留,將其他的大寫字母移除。

sql> select translate('2krw229','0123456789abcdefghijklmnopqrstuvwxyz','0123456789') aa from dual;

aa ----

2229

示例證明是按照字元來處理,不是按照位元組來處理,如果to_string的字元數比from_string多的話,多出的字元數似乎沒有什麼用處,也不會引發異常

select translate('我是中國人,我愛中國', '中國', 'china') aa from dual aa

----

我是ch人,我愛ch

下面的示例證明,如果from_string的字元數大於to_string,那麼多出的字元會被移除,也就是ina三個字元會從char引數中移除,當然區分大小寫啦。

select translate('i am chinese, i love china', 'china', '中國') aa from dual aa

----

i m 中國ese, i love 中國

如果第二個引數為空字串,整個返回null。

sql> select translate('2krw229','0123456789abcdefghijklmnopqrstuvwxyz','') from dual;

t -

在銀行轉帳時經常看見賬戶人只顯示姓名的最後乙個字,其餘的用星號代替,我就用translate來做個類似的東西吧

select translate('中國人',substr('中國人',1,length('中國人') - 1),rpad('*',length('中國人'),'*')) aa from dual aa

----

**人

sql> select replace('abcdefghij','abcdef','123456') from dual;

replace('a

----------

123456ghij

sql> select replace('abcbbaadef','ba','#@') from dual;

replace('a

----------

abcb#@adef

sql> select replace('abcbbaadef','bad','#@') from dual;

replace('a

----------

abcbbaadef

js format和replace的用法和區別

在專案開發中遇到一種openapi的介面呼叫,也就是介面url中帶有動態引數,沒有了解format的用法前,都是用replace處理的,下面看例項 後台提供的介面路徑 deletemenucollection apipath menucollection delete 這裡用到了menuid和men...

replace()和replaceAll()的區別

replace char oldchar,char newchar 返回乙個新的字串,它是通過用 newchar 替換此字串 現的所有 oldchar 而生成的。引數是字串也成立,eg str.replace 20 用 20 替換空格。replaceall string regex,string r...

translate和replace 的區別

1.translate 語法 translate char,from,to 用法 返回將出現在from中的每個字元替換為to中的相應字元以後的字串。若from比to字串長,那麼在from中比to中多出的字元將會被刪除。三個引數中有乙個是空,返回值也將是空值。舉例 sql select transla...