oracle translate using,oracle translate() 详解
一、語法:
TRANSLATE(string,from_str,to_str)
二、目的
返回將(所有出現(xiàn)的)from_str中的每個字符替換為to_str中的相應(yīng)字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一個超集。
如果 from_str 比 to_str 長,那么在 from_str 中而不在 to_str 中的額外字符將從 string 中被刪除,因為它們沒有相應(yīng)的替換字符。
to_str 不能為空。Oracle 將空字符串解釋為 NULL,并且如果TRANSLATE 中的任何參數(shù)為NULL,那么結(jié)果也是 NULL。
三、允許使用的位置
過程性語句和SQL語句。
四、示例
示例一、select translate('abcbbaadef','ba','#@') from dual (b將被#替代,a將被@替代)
select translate('abcbbaadef','bad','#@') from dual (b將被#替代,a將被@替代,d對應(yīng)的值是空值,將被移走)
因此:結(jié)果依次為:@#c##@@def 和@#c##@@ef
示例二、將數(shù)字轉(zhuǎn)換為9,其他的大寫字母轉(zhuǎn)換為X,然后返回。
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX')
as ?"License" FROM DUAL;
結(jié)果:
License
--------
9XXX999
示例三、將數(shù)字保留,將其他的大寫字母移除??? SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')
as?? "Translate example" FROM DUAL;
結(jié)果:
Translate example
-----------------
2229
示例四:示例證明是按照字符來處理,不是按照字節(jié)來處理,如果to_string的字符數(shù)比from_string多的話,
多出的字符數(shù)似乎沒有什么用處,也不會引發(fā)異常。
a.SELECT TRANSLATE('我是中國人,我愛中國', '中國', 'China')
as ? "Translate example" FROM DUAL;
--用TRANSLATE是以一個字符為單位的,只要匹配到都會轉(zhuǎn)換。比如不管“北”和“京”是否連接在一起都會做轉(zhuǎn)換?????? b.select TRANSLATE('上海京天津重慶北廣州深圳武漢','深圳北京','XXXX') from dual;
結(jié)果:上海X天津重慶X廣州XX武漢
示例五:下面的示例證明,如果from_string的字符數(shù)大于to_string,那么多出的字符會被移除,
也就是ina三個字符會從char參數(shù)中移除,當(dāng)然區(qū)分大小寫啦。
SELECT TRANSLATE('I am Chinese, I love China', 'China', '中國')
as "Translate example" FROM DUAL;
示例六:以下示例證明,如果第二個參數(shù)為空字符串,整個返回null。
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','')
as ?"License"? FROM DUAL;
示例七:在銀行轉(zhuǎn)帳時經(jīng)常看見賬戶人只顯示姓名的最后一個字,其余的用星號代替,我就用translate來做個類似的東西吧。
SELECT TRANSLATE('中國人',substr('中國人',1,length('中國人') - 1),rpad('*',length('中國人'),'*'))
as "License"? FROM DUAL;
五、translate中有“#”的特殊用法,以#開頭的表示所有字符
select translate('liyan4h123ui','#liyanhui','#') from dual
結(jié)果:4123
select translate('liyan4h123ui','#liyanhui','#z') from dual;
結(jié)果:z4123
select translate('liyan4h123ui','#liyanhui','#zx') from dual;
結(jié)果:zx4123x
select translate('asadad434323', '#0123456789','#') from dual ;
結(jié)果:asadad
補充:TRANSLATE(string,from,to)轉(zhuǎn)換的兩個注意點—— 1、轉(zhuǎn)換源字串(from)在目的字串(to)中不存在對應(yīng),則轉(zhuǎn)換后被截除 2、轉(zhuǎn)換目的字串(to)不能為'',''在oracle中被視為空值,因此無法匹配而返回為空值 另外,一個漢字作為一個字符還是兩個字符進(jìn)行轉(zhuǎn)換與字符集的設(shè)置相關(guān)。
總結(jié)
以上是生活随笔為你收集整理的oracle translate using,oracle translate() 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是前贴片、中贴片和后贴片广告?它们分
- 下一篇: LaTeX 公式(转自)Iowa_Bat