您的位置:首页 > 数据库 > Oracle

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

2015-01-13 00:14 477 查看
原地址:点击打开链接


方法一:通过 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: