天天看點

Oracle中的translate和replace函數

工作過程中寫sql時,遇到了需要将原始字元串的某些字元替換成所需字元的需求,查到了兩個函數,translate()和replace(),接下來講講它們的差別

translate函數

文法:

translate(expr, from_string, to_string)
           

含義:translate傳回expr值,其中出現在from_string中的每個字元都會被to_string中的相應字元替換掉。

用法:

1.

select translate('abcdefgh','abc' ,'123') from dual;  
           

 --a替換為1,b替換為2,c替換為3

結果:123defgh

2.

select translate('abcdefgh','abc' ,'12') from dual; 
           

   --如果沒有對應字元則替換為null,是以c替換為null;

結果:12defgh

3.

select translate('abcdefgh','abc' ,'123456') from dual;
           

   --如果對應字元過多,不影響

結果:123defgh

4.

select translate('abcdefgh','abc' ,'') from dual;
           

 --如果替換字元整個為空字元,則直接傳回null

結果:null

5.

select translate('abccdefgh','&abc' ,'&') from dual; 
           

--如果想篩掉對應字元,應傳入一個不相關字元,同時替換字元也加一個相同字元;

結果:defgh

6.

select translate('abcdefgh','abcc' ,'1234') from dual;
           

  --如果相同字元對應多個字元,按第一個

結果:1233defgh;

7.

select translate('0中華人民6共和國6萬歲8','#0123456789' ,'#') from dual;
           

  --将原始字元串中的所有數字删除

結果:中華人民共和國萬歲

如果想篩掉漢字保留數字,則先把數字篩選掉,再用篩選出的漢字去篩選原來的語句留下數字

select translate('0中華人民6共和國6萬歲8','#'||translate('0中華人民6共和國6萬歲8','#0123456789','#'),'#') from dual;
           

結果:0668

replace函數

文法:

replace(char, search_string [, replace_string])
           

含義:replace傳回char值,其中會将char中與search_string相同的字元串全部替換成replace_string字元串。

用法:

1.

select replace('0123456789','0','a') from dual; 
           

 --0替換成a

結果:a123456789

2.

select replace('0123456789','0','') from dual;
           

  --0替換成null

結果:123456789

3.

select replace('0123456789','0') from dual;
           

  --當replace_string不指定時,則會将char中與search_string相同的字元删掉

結果:123456789

4.

select replace('0123456789','012',,'abcd') from dual; 
           

--将字元串整體換掉,而不是單個字元換掉

結果:abcd3456789

總結:replace與translate都是替代函數,隻不過replace針對的是字元串,将對應的字元串整體替換;而translate針對的是單個字元,隻是替換對應的字元。

大家有補充的歡迎留言評論!!!