Oracle 中如何判斷一個字串是否為數字
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
SQL>