为了统计字符串'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;返回的是空字符串‘’,而不是‘||’
请各位大侠指教,谢谢

解决方案 »

  1.   

    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;
      

  2.   

    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。
      

  3.   

    select translate('45454|4545|45411',  '0123456789', '|') from dual 出现的就是'||'
      

  4.   


    但如果我的表达式中含有‘0’ 结果就不正确了 
    例如:
    select translate('45454|4540005|454111',  '0123456789', '|') from dual 
    结果:
    ‘|||||’