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>select

 方法二:经过 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>co

  在实际使用过程当中,能够根据状况选用这两种方法。第一种方法的好处是能够判断带小数的数字,而第二种方法只能判断整数。由于若是 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 SQL>