Oracle 判断是否为数字型(金额型)

2014-11-24 18:27:25 · 作者: · 浏览: 1

在sql server,校验数据是否为数字型比较容易,有提供的方法可以使用:


ISNUMERIC


当是数字型,方法返回值为1;否则返回值为0


例:


select * from tablename where isnumeric(data) = 1


方法一,用正则的方法:


使用 regexp_like


例:


select * from tablename where


regexp_like(trim(data),'^([\-] [0-9]+\.[0-9]+)$|^([\-] [0-9])+$|^([\-] [0-9]{1}\.[0-9]+E[\-] [0-9])+$')


这个正则分三部分:


1、^([\-] [0-9]+\.[0-9]+)$


浮点型,包括带小数点的情况


2、^([\-] [0-9])+$


整数型


3、^([\-] [0-9]{1}\.[0-9]+E[\-] [0-9])+$


科学计数法表示的数字


以上三部分均包括了负数的情况


注:regexp_like适用于oracle 10g及其之后的版本,之前的不适用。


方法二,用正则的方法:


使用translate方法


例:


select data,decode(trim(translate(trim(cdata),'0123456789.',' ')),'','is number','not number')


from tablename


但上面这个还不太完善,没有考虑负数,科学计数法表示,数据本身为空,或对“.”的验证。


所以使用方法二的时候要注意,或修改之(写得比较完善有点麻烦,不如写个方法了)。