日期:2014-05-16 浏览次数:20537 次
使用过 asp 的应该对 isnumeric 函数不会陌生,这是一个常用的判断入参是否为数字的函数。在 oracle 中没有现成的判断是否为数字函数,下面就用三种方法来实现:
1. 利用 to_number
CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
?? RETURN NUMBER
IS
?? v_str FLOAT;
BEGIN
?? IF str IS NULL
?? THEN
????? RETURN 0;
?? ELSE
????? BEGIN
???????? SELECT TO_NUMBER (str)
?????????? INTO v_str
?????????? FROM DUAL;
????? EXCEPTION
???????? WHEN INVALID_NUMBER
???????? THEN
??????????? RETURN 0;
????? END;
????? RETURN 1;
?? END IF;
END isnumeric;
2. 利用 regexp_like
CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
?? RETURN NUMBER
IS
BEGIN
?? IF str IS NULL
?? THEN
????? RETURN 0;
?? ELSE
????? IF regexp_like (str,
'^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$')
????? THEN
???????? RETURN 1;
????? ELSE
???????? RETURN 0;
????? END IF;
?? END IF;
END isnumeric;
3. 利用 TRANSLATE
CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
?? RETURN NUMBER
IS
?? v_str VARCHAR2 (1000);
BEGIN
?? IF str IS NULL
?? THEN
????? RETURN 0;
?? ELSE
????? v_str := TRANSLATE (str, '.0123456789', '.');
????? IF v_str = '.' OR v_str = '+.' OR v_str = '-.' OR
v_str IS NULL
????? THEN
???????? RETURN 1;
????? ELSE
???????? RETURN 0;
????? END IF;
?? END IF;
END isnumeric;