注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

饥民2011

一直在搬砖

 
 
 

日志

 
 
 
 

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

2012-12-26 12:54:32|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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'替换, bc则没有指定替换成什么,oracle会默认替换成null。所以返回'Ad'.

 

2.

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

答案是错的, 如果to_strblank('')或者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的啊。

 

  评论这张
 
阅读(258)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017