工作过程中写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针对的是单个字符,只是替换对应的字符。
大家有补充的欢迎留言评论!!!