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

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

oracle判断是否是数字  

2013-06-21 18:16:12|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      如题,有一种处理方式是写一个函数,使用to_number,如果出错了就是字符,否则就是数字。这种处理在每个数据库里都要定义这样的函数,不是很方便,可以直接sql解决。
select nvl2(translate(status_describe, '\1234567890', '\') , '0', status_describe) n
from status s where REALTIME = 'nowcheck';
这里 '0', status_describe如果使用 0, to_number(status_describe),会报nvl2函数类型不匹配错误。所以像上面语句那样使用字符就行,如果是更新number类型的字段也可以,oracle在可以转换成功的情况,会自动转换为number类型。
      translate函数,是replace函数的超集,使用说明如下:
TRANSLATE ( 'char' , 'from_string' , 'to_string' )

TRANSLATE返回将from_string中的每个字符替换为to_string中的相应字符以后的string。

TRANSLATE是REPLACE所提供的功能的一个超集。如果from_string比to_string长,那么在from_string中而不在to_string中的额外字符将从char中被删除,因为它们没有相应的替换字符。to_string不能为空。Oracle将空字符串解释为NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL。

      translate(status_describe, '\1234567890', '\')的意思就是把所有数字给去除了,这里还有个问题,就是如果原始的char字符里有\字符的话,会被保留下来(由于to_string不能为''这样的空的原因)。但我当前的需求的话正好满足,因为不可能存在\字符。如果想全部都可以出来,可以在translate外层再replace下\字符就可以了。
  评论这张
 
阅读(2929)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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