1. TRANSLATE
TRANSLATE(string-expression-+----------------------------------------------+-)-><
'-,--to-string--+----------------------------+-'
| .-,--' '-. |
'-,--from-string--+--------+-'
'-,--pad-'
即此函数最多可以包含4个参数。
TRANSLATE(字符串表达式,目标字符串,源字符串,填补字符串)
其中
1.“字符串表达式”是你想要处理的字符串
2.“目标字符串”是你想要转换成的目标字符串。
3.“源字符串”是你想要转换的字符串。
4.“填补字符串”是在目标字符串比源字符串短的情况下,用于填充目标字符的。如果不包含此参数则取默认值,默认值为' '(一个空格)。
TRANSLATE和REPLACE的区别在于replace是用于字符串的替换,属于整体的替换,而TRANSLATE是逐字符的替换,
比如 'abc' 'Abc'
replace 是找到字符串表达式中的所有'abc'字符,全部整体替换为'Abc' 即可,而
TRANSLATE则是先找到所有的A,替换为a,然后再找到所有的b,全部替换为c,最后,找到全部的c,替换为c
当整个TRANSLATE函数只有参数的时候,相当于UPPER()函数
SELECT 'abcd' ---abcd
,TRANSLATE('abcd') ---ABCD 相当于UPPER()函数
,TRANSLATE('abcd','','b') ---a cd 把b替换为空格,此时DB2解析目标字符串是没有的,所以会用填补字符串' '来替换b
,TRANSLATE('abcd','','a','') ---bcd 把a替换为空
,TRANSLATE('abcd','A','A') ---abcd 把A替换为A,因为不存在A,所以相当于什么也不做
,TRANSLATE('abcd','A','a') ---Abcd 把a替换为A
,TRANSLATE('abcd','A','ab') ---A cd 把a替换为A,把b替换为默认的pad,也就是' '
,TRANSLATE('abcd','A','ab',' ') ---A cd 同上,只不过指定了pad
,TRANSLATE('abcd','A','ab','z') ---Azcd 把a替换成A,b替换成z
,TRANSLATE('abcd','AB','a') ---Abcd 把a替换成A,由于替换的目标字符串,比源字符串长,因此忽略多出的部分。
FROM sysibm.dual
oracle里:
TRANSLATE(str1,str2,str3)
用str3里对应的字段,逐一替换str1中的str2字段。
例
select TRANSLATE('12345bcdm','1234567abcdem','9999999xxxxxx') from dual ;
结果显示 : 99999xxxx
select TRANSLATE( '2011-01-01', ' 0123456789-','') from dual
结果显示 :null(因oracle里没有空串)
即缺省替换为 ' '(空格)
db2 里:
TRANSLATE(str1,str2,str3)
于oracle里刚好相反,以str2替换str3
例
select translate('012-38(3)','***','-()') from sysibm.SYSDUMMY1
结果为:012*38*3*
select TRANSLATE( '2011-01-01', '', ' 0123456789-' ) from sysibm.SYSDUMMY1
结果为 '' 即空串(不是null,上方oralce里第二个例子结果为null,因oracle里没有空串)
同样缺省替换为' '(空格)