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里没有空串)
同样缺省替换为' '(空格)
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里没有空串)
同样缺省替换为' '(空格)
相关文章推荐
- Access和sql server的语法区别 (包括db2 oracle)
- oracle和SQL SERVER以及DB2之间的区别
- DB2创建表和oracle的区别
- DB2和Oracle区别
- db2和oracle的一些区别
- Access和sql server的语法区别 db2 oracle [darkcom 发表于 2006-7-27 8:51:21]
- DB2、ORACLE SQL写法的主要区别
- Oracle与DB2的区别
- Access和sql server的语法区别 (包括db2 oracle)
- DB2与oracle的区别
- oracle和sql server DB2的区别
- db2和oracle的一些区别
- oracle和db2的sql语句区别
- Oracle和DB2的区别
- DB2和Oracle创建序列和查询的区别
- db2 与 Oracle 的锁的区别和比较
- DB2的常用命令及与ORACLE的一些区别
- Access和sql server的语法区别 (包括db2 oracle)
- DB2和Oracle创建序列和查询的区别
- Oracle DB2中substr的区别