Oracle 中如何判断一个字符串是否为数字

方法一:通过 To_Number 函数异常来判断

CREATE OR REPLACE FUNCTION Is_Number (
   str_    VARCHAR2 ) RETURN VARCHAR2   
IS     
   num_    NUMBER;          
BEGIN     
  num_ := to_number(str_);         
  RETURN 'Y';     
EXCEPTION   
   WHEN OTHERS THEN          
      RETURN 'N';     
END Is_Number;   
/

SQL> select Is_Number('12345') from dual;
 
IS_NUMBER('12345')
--------------------------------------------------------------------------------
Y
 
SQL> select Is_Number('123.45') from dual;
 
IS_NUMBER('123.45')
--------------------------------------------------------------------------------
Y
 
SQL> select Is_Number('123a') from dual;
 
IS_NUMBER('123A')
--------------------------------------------------------------------------------
N
 
SQL>

 方法二:通过 translate函数来实现

SELECT nvl2(translate('123','/1234567890','/'),'CHAR','NUMBER')   
FROM   dual ;

SQL> SELECT nvl2(translate('123','/1234567890','/'),'CHAR','NUMBER')
  2  FROM   dual;
 
NVL2(TRANSLATE('123','/1234567
------------------------------
NUMBER
 
SQL> 
SQL> SELECT nvl2(translate('123A','/1234567890','/'),'CHAR','NUMBER')
  2  FROM   dual;
 
NVL2(TRANSLATE('123A','/123456
------------------------------
CHAR
 
SQL>

  在实际使用过程中,可以根据情况选用这两种方法。第一种方法的好处是可以判断带小数的数字,而第二种方法只能判断整数。因为如果 translate 函数如果写成 translate('123A','/1234567890.','/') 这种形式是会有问题的。

SQL> select Is_Number('123.45.6') from dual;
 
IS_NUMBER('123.45.6')
--------------------------------------------------------------------------------
N
 
SQL> 
SQL> SELECT nvl2(translate('1234.5.6','/1234567890.','/'),'CHAR','NUMBER')
  2  FROM   dual;
 
NVL2(TRANSLATE('1234.5.6','/12
------------------------------
NUMBER

-----------------------------------------------

SELECT TRANSLATE('2KRW229', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789') --把字符翻译成数字

"Translate example"

FROM DUAL;

Translate example

-----------------

2229

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值