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


參考:https://blog.csdn.net/lzflydream/article/details/42592959


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM