Oracle translate 函数的用法, 以及和replace的区别

 translate 是用来替换字符的函数

语法:

          translate(char, from_str,to_str)

 

其中,char是待处理的字符串.

               from_str是按顺序排列若干个要被替换的字符集合,注意是字符集合而不是字符串。

               to_str 是按顺序对应from_str要被替换成的字符集合。

 

例如:

              translate('abcd','ab','AB') 

  执行上面语句后, 'abcd'中的'a' 被'A'替换,  'b'被'B'替换。所以返回"ABcd"

 

 

这样看上去跟replace函数很类似。

 

 

但是,在

           replace('abcd','ab','AB') 语句中,   是把'abcd'中的 'ab' 整个字符串替换成'AB',  应该能看出与上面translate的区别了吧。

举个例子

          translate('acbd','ab','AB')  会返回"AcBd" ,因为'a' 被'A'替换,  'b'被'B'替换嘛,替换是每1个字符单独处理的。

          而 replace('acbd','ab','AB')  则返回"acbd”, 因为字符串'ab'找不到啊, 所以没有做到替换处理。

 

下面写一些translate的一些要注意的特性。

       

1.

translate('abcd','abc','A') 中,    字符a会被'A'替换, 而b与c则没有指定替换成什么,oracle会默认替换成null。所以返回'Ad'.

 

 

2.

translate('abcd','abc','') 中, 连A被替换的字符也被省略掉了,是不是因为abc 3个 字符都被替换成null,所以返回d呢?

答案是错的, 如果to_str是blank('')或者null,则所有字符都会替换成null, 所以这个表达式返回null.

 

 

 

3.translate有许多特别的用途,

例如 我想将1个字符串内的数字全部去掉,则可以用
          

translate(str,'a1234567890','a')

这样的话字符串的a(如果存在的话)会被替换成自己a,而其他数字会替换成null,注意是null而不是空格啊。

或者

translate(str,' 1234567890',' ')

用空格来代替上面的'a'也ok,注意from_str和to_str都是以空格开头啊。

 

 

而不能用

translate(str,'1234567890','') ,  参考上面的特性2,会返回null的啊。

 

posted on 2014-07-28 14:24  锟斤拷锟斤拷  阅读(826)  评论(0编辑  收藏  举报

导航