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针对的是单个字符,只是替换对应的字符。

大家有补充的欢迎留言评论!!!

发布了16 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/c_staunch/article/details/102795249