关于 oracle translate 函数的疑问

singzero 2013-03-28 03:40:31
为了统计字符串'45454|4545|45411'中的‘|’的数
打算将字符串'45454|4545|45411' 通过替换变为‘||’,即将其中的数字都替换为空
于是采用了函数translate()
但是效果并不理想
select translate('45454|4545|45411', '0123456789', '') from dual;
返回结果为:‘’ ,很奇怪不知道为什么会返回空字符串,毕竟没有提供‘|’的转换关系的话,应该不转换才对

于是查阅了一下文档采用下面两种方式返回结果正常:
select translate('45454|4545|45411', '|0123456789', '|') from dual;
select translate('45454|4545|45411', '#0123456789', '#') from dual;
这两种方法返回的结果为 ‘||’


我的疑问是为什么
select translate('45454|4545|45411', '0123456789', '') from dual;返回的是空字符串‘’,而不是‘||’
请各位大侠指教,谢谢
...全文
171 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
睿智天成 2013-03-28
  • 打赏
  • 举报
回复
引用 4 楼 singzero 的回复:
引用 3 楼 Rexmax 的回复:select translate('45454|4545|45411', '0123456789', '|') from dual 出现的就是'||' 但如果我的表达式中含有‘0’ 结果就不正确了 例如: select translate('45454|4540005|454111', '0123456789', '|'……
上面是将'45454|4540005|454111'中的'0'都转换成了'|',删除数字 123456789后字符串还留下了'|000|'
睿智天成 2013-03-28
  • 打赏
  • 举报
回复
上面语句的简单理解就是:因为 '0123456789'中的'0'对应的是'|'中的'|',因为'45454|4545|45411'没有'0'所有无须转换(有'0'就将第一个字符串中的'0'都转换成'|'),而'0123456789'中的'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'对应'|'中的'',所有'45454|4545|45411'中的'1'、'4'和'5'都要删除,所有结果为'||'.
singzero 2013-03-28
  • 打赏
  • 举报
回复
引用 3 楼 Rexmax 的回复:
select translate('45454|4545|45411', '0123456789', '|') from dual 出现的就是'||'
但如果我的表达式中含有‘0’ 结果就不正确了 例如: select translate('45454|4540005|454111', '0123456789', '|') from dual 结果: ‘|||||’
睿智天成 2013-03-28
  • 打赏
  • 举报
回复
select translate('45454|4545|45411', '0123456789', '|') from dual 出现的就是'||'
睿智天成 2013-03-28
  • 打赏
  • 举报
回复
TRANSLATE(string,from_str,to_str) 返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。
ora-0600 2013-03-28
  • 打赏
  • 举报
回复
TRANSLATE(string,from_str,to_str) 返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。 select translate('45454|4545|45411', '|0123456789', '|') from dual;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧