Oracle的Replace函数与translate函数详解与比较
簡要比較:
replace 字符串級別的代替 如:SELECT REPLACE('accd','cd','ef') from dual; --> aefd
translate 字符級別的代替 如:select translate('acdd','cd','ef') from dual; -->aeff
分別詳解
replace:語法:REPLACE(char,search_string[,replacement_string])
解釋:replace中,每個search_string都被replacement_string所代替select replace('acdd','cd','ef') from dual; --> aefd如果replacement_string為空或為null,那么所有的search_string都被移除select replace('acdd','cd','') from dual; --> ad如果search_string 為null,那么就返回原來的charselect replace('acdd','ef') from dual; -->acddselect replace('acdd','','') from dual; -->acdd(也是兩者都為空的情況)translate:語法:TRANSLATE('char','from_string','to_string')???? 解釋:translate中,每個from_string中的字符被to_string中舉例說明:
Sql代碼
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; TRANSLATE ( -------------- 123456ghij SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; TRANSL ---------- 123456
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; TRANSLATE ( -------------- 123456ghij SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; TRANSL ---------- 123456 Sql代碼????? select TRANSLATE('kkaxksx', 'kx', '12') from dual
結果:11a21s2
select TRANSLATE('kkaxksx', 'kx', '12') from dual 結果:11a21s2
translate中有“#”的特殊用法,以#開頭的表示所有字符
translate的主要作用是提取,替換字符串,其作用有時候和replace差不多.具體看下面的例子
Sql代碼
select translate('liyan4h123ui','#liyanhui','#') from dual 結果:4123 select translate('liyan4h123ui','#liyanhui','#z') from dual; 結果:z4123 select translate('liyan4h123ui','#liyanhui','#zx') from dual; 結果:zx4123x select translate('asadad434323', '#0123456789','#') from dual ; 結果:asadad select translate('liyan4h123ui','#liyanhui','#') from dual 結果:4123 select translate('liyan4h123ui','#liyanhui','#z') from dual; 結果:z4123 select translate('liyan4h123ui','#liyanhui','#zx') from dual; 結果:zx4123x select translate('asadad434323', '#0123456789','#') from dual ; 結果:asadad
利用TRANSLATE實現關鍵字的過濾
有時候需要對一些關鍵詞語進行過濾,直接使用replace的話,可能由于這些關鍵詞語比較多而要嵌套使用,語句也不好寫,同時也浪費資源。這種情況其實可以使用TRANSLATE和replace組合使用就能完全達到目的了。
比如要將“深圳”、“北京”等作為關鍵詞語,在顯示內容是要將這些詞語過濾掉不顯示:
Sql代碼 --首先使用TRANSLATE將關鍵詞語統一轉換成一個特殊的字符串,比如這里的X SQL> select TRANSLATE('上海北京天津重慶廣州深圳武漢','深圳北京','XXXX') from dual; TRANSLATE('上海北京天津重慶廣? ------------------------------ 上海XX天津重慶廣州XX武漢 --然后用replace將特殊的字符串替換掉。注意:不能用TRANSLATE直接將關鍵詞語直接轉換為''字符串 SQL> select replace(TRANSLATE('上海北京天津重慶廣州深圳武漢','深圳北京','XXXX'),'X') from dual; REPLACE(TRANSLATE('上海北京天? ------------------------------ 上海天津重慶廣州武漢 SQL> --但是,用TRANSLATE是以一個字符為單位的,只要匹配到都會轉換。比如不管“北”和“京”是否連接在一起都會做轉換 SQL> select TRANSLATE('上海京天津重慶北廣州深圳武漢','深圳北京','XXXX') from dual; TRANSLATE('上海京天津重慶北廣? ------------------------------ 上海X天津重慶X廣州XX武漢
--首先使用TRANSLATE將關鍵詞語統一轉換成一個特殊的字符串,比如這里的X SQL> select TRANSLATE('上海北京天津重慶廣州深圳武漢','深圳北京','XXXX') from dual; TRANSLATE('上海北京天津重慶廣? ------------------------------ 上海XX天津重慶廣州XX武漢 --然后用replace將特殊的字符串替換掉。注意:不能用TRANSLATE直接將關鍵詞語直接轉換為''字符串 SQL> select replace(TRANSLATE('上海北京天津重慶廣州深圳武漢','深圳北京','XXXX'),'X') from dual; REPLACE(TRANSLATE('上海北京天? ------------------------------ 上海天津重慶廣州武漢 SQL> --但是,用TRANSLATE是以一個字符為單位的,只要匹配到都會轉換。比如不管“北”和“京”是否連接在一起都會做轉換 SQL> select TRANSLATE('上海京天津重慶北廣州深圳武漢','深圳北京','XXXX') from dual; TRANSLATE('上海京天津重慶北廣? ------------------------------ 上海X天津重慶X廣州XX武漢補充:TRANSLATE(string,from,to)轉換的兩個注意點——
1、轉換源字串(from)在目的字串(to)中不存在對應,則轉換后被截除
2、轉換目的字串(to)不能為'',''在oracle中被視為空值,因此無法匹配而返回為空值
另外,一個漢字作為一個字符還是兩個字符進行轉換與字符集的設置相關。
總結
以上是生活随笔為你收集整理的Oracle的Replace函数与translate函数详解与比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分辨率、帧率、码率之间的关系
- 下一篇: 浮点型数据在内存中是如何存储的