我去执行select translate('a&b','t{}','pp') from dual;结果如下:输入 b 的值:  d
原值    1: select translate('a&b','t{}','pp') from dual
新值    1: select translate('ad','t{}','pp') from dualTR
--
ad首先它提示我去输入b的值,然后得到ad。我想请教一下为什么会这样,得到的结果为何是ad?
另外select translate('at{&}t','at{}','at') from dual;的结果为什么是    at&t   ?万分感激

解决方案 »

  1.   

    translate是用来转换字符串的,在第一个参数字符串中找第二个参数字符串,如果找到就替换成第三个参数字符串。
    select translate('Black', 'Bl', 'B') from dualTRANSLATE('BLACK','BL','B')
    ---------------------------
    Back                 
      

  2.   


    嗯,这个我知道,问题是at{&}中能匹配到at{}?
    还有,translate('a&b','t{}','pp')没匹配到t{}为什么会提示输入b的值,而且不是其它,我就想知道是怎么个原理。
      

  3.   

    简单的说,translate是按位置逐个替换
      

  4.   

    简单理论我也知道...我想了一下,是不是这样:
    translate('at{&}t','at{}','at')其中at{}里面的a用后面at中的a替换,at{}里面的t用后面at中的t替换,而{}没有任何东西替换,那就是空,就是遇到{}两个字符的时候都删掉,所以最后结果就成了at&t。
      

  5.   

    求证了一下,果然是的,谢谢两位!
    SQL> select translate('ta&]]b}','t&}','c&') from dual;TRANSL
    ------
    ca&]]b