Oracle translate函式和正則的幾個應用

壹頁書發表於2015-10-27
Oracle translate函式

column str format a20;
var str varchar2(200);
exec :str:='abc';

select translate(:str,'abc','123') str from dual;
select translate(:str,'a','') str from dual;
select translate(:str,'abc','1') str from dual;



第一種情況,將對映的字串修改
第二種情況,函式第三個引數為空串,則返回 null
第三種情況,如果不能完全對映,則不能對映的字元,一律對映為空串.

應用一,計算字元在字串中出現的次數
var str varchar2(200);
exec :str:='10,20,25';

select regexp_count(:str,',')+1 as cnt from dual;
select length(regexp_replace(:str,'[^,]'))+1 as cnt from dual;
select length(translate(:str,','||:str,','))+1 as cnt from dual;



其中regexp_count在11g中提供

應用二,從字串中刪除不需要的字元

column str format a10;
var str varchar2(200);
exec :str:='CHARK';

select translate(:str,'1AEIOU','1') str from dual;
select regexp_replace(:str,'[AEIOU]') str from dual;


將母音字元刪除.

應用三,字元數字分離
column c1 format a10;
column c2 format a10;
var str varchar2(200);
exec :str:='IT10MANAGER';

select 
regexp_replace(:str,'[0-9]','') c1,
regexp_replace(:str,'[^0-9]','') c2
from dual;

select translate(:str,'a0123456789','a') c1,
translate(:str,'0123456789'||:str,'0123456789') c2
from dual;



注意:
正則,^不在方括號裡時,表示字串開始.

參考:
Oracle查詢最佳化改寫,第五章

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1816555/,如需轉載,請註明出處,否則將追究法律責任。

相關文章