http://hi.baidu.com/yljf1314/item/59c27962e3f9262669105b89
Oracle PL/SQL并没有提供一个判断值是否为数字的函数,所以我们在实际中遇到以下的问题时,
常常会很郁闷。
例如有一个表,
SQL> desc userlogin
名称 是否为空? 类型
----------------------------------------- -------- ----------------------
NAME VARCHAR2(20)
PSW VARCHAR2(20)
SQL> select * from userlogin;
NAME PSW
-------------------- --------------------
张三 123456
李四 abcdefg
钱五 abc123
想把psw为纯数字的记录找出来,就很麻烦。
为了解决这个问题,我们先建一个函数,
CREATE OR REPLACE FUNCTION ISNUMBER(MyStr VARCHAR2) RETURN NUMBER
IS
STR VARCHAR2(400);
ISNUM NUMBER;
NUM NUMBER;
BEGIN
--返回0,不是数字。1,是数字
ISNUM:=0;
STR:=TRIM(MyStr);
--如果输入值为空,就返回不是数字。
IF TRIM(STR) IS NOT NULL THEN
BEGIN
NUM:=TO_NUMBER(STR);
ISNUM:=1;
EXCEPTION
WHEN INVALID_NUMBER THEN
NULL;
WHEN OTHERS THEN
NULL;
END;
END IF;
RETURN ISNUM;
END;
例如1::(查询指定字段是数值类型数据的信息)
SQL> select * from userlogin where isnumber(psw)=1;
NAME PSW
-------------------- --------------------
张三 123456
例如2::(查询指定字段不是数值类型数据的信息)
SQL> select * from userlogin where isnumber(psw)=0;
NAME PSW
-------------------- --------------------
李武 1233c2f