工作過程中寫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針對的是單個字元,隻是替換對應的字元。
大家有補充的歡迎留言評論!!!