刚不久碰到oracle translate函数,搞了半天,终于把这个弄懂了,其实还是蛮简单的,记录下方法
在学translate函数时,首先得会replace函数的使用,
replace语法:
replace(str,oldStr,newStr)
该函数时将str中存在的oldStr替换成newStr,
eg:
replace('I am a chinese,I love
China', 'China', '中国')='I am a chinese,I love
中国';
懂了这个,接下来介绍translate函数
translate语法:
translate(str,src,dest)
语法同replace()有点类似,但该替换是按照字符来替换的,意思是将str中含src中的字符替换成dest的字符.
因为该函数是针对字符的,所以src与dest的有效字符是一一对应的.(即:有效长度是一样的),也就是通常要求src的长度=dest的长度
eg:
src="1234",dest="@#%!",
str针对每一个字符,只要碰到1就替换成@,2替换成#...,
对应关系(1->@,2->#,3->%,4->!)
translate('19813','1234','@#%!')='@98@%'
1,重复的src:只取第一个字符对应的串,
translate('0我a12cbf9爱中国123aalaaa','a我aa','#!@@')='0!#12cbf9爱中国123##l###';
所有的a替换成#,我替换成!
对应关系(a->#,我->!,a->#,a->#)2,dest不可为'',也不可为null,这样的返回结果都是null;
translate('0我a12cbf9爱中国123aalaaa','a','')=null; 注:
length(null)!=0,length('')!=03,src的长度大于dest时,先取src对应长度dest的值进行一一对应,接下来的字符在src中,而不在dest中的字符str将会剔除该部分的值,
translate('我爱中国123爱','0123456789'||'我爱中国123爱','0123456789')='123'变量中的数字,用于提取字符串中的数字,
对应关系(0->0,1->1,2->2.....9->9[str中如果含有'我爱中国',则删除这几个字符])
translate('0129123中','0我a12cbf9爱中国1230123456789','0123456789')='034834'
对应关系(0->0,我->1,a->2,1->3,2->4,c->5,b->6,f->7,9->8,爱->9)
需删除的字符[中国1230123456789],中括号中红色部分为需要删除的部分,黑色部分已在对应关系中含有了4,字符区分大小写
5,如果src长度小于dest的长度,则dest多出的长度无用
总结下:
1),该函数是字符替换函数
2),src长度大于dest长度,先取相等长度对应后,再去除在src中,而不在dest中的字符,救过就right了
简单吧...