您的位置:首页 > 数据库 > Oracle

TRANSLATE函数(DB2、Oracle)区别

2014-10-31 16:24 246 查看
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里没有空串)

同样缺省替换为' '(空格)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: