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...