如何判断一个字符串的内容是否是数值
上一篇 /
下一篇 2008-04-03 16:23:19
/ 个人分类:Oracle学习
问题:判断一个字符串的内容是否是数值。 (转载自赛迪网)
解决方法:利用Oracle数据库自带的TO_NUMBER函数(增加了异常处理部分,防止非数字类型导致函数异常而中断执行)。
方法一:
CREATE OR REPLACE FUNCTION F_IS_NUM(P_NUM IN VARCHAR2) RETURN VARCHAR2 AS
V_TMP NUMBER;
BEGIN
IF P_NUM IS NULL THEN
RETURN NULL;
END IF;
V_TMP := TO_NUMBER(P_NUM);
RETURN 'T';
EXCEPTION
WHEN OTHERS THEN
RETURN 'N';
END;
方法二:
CREATE OR REPLACE FUNCTION F_IS_NUM1(P_NUM IN VARCHAR2) RETURN VARCHAR2 AS
V_NUM_DOT NUMBER DEFAULT 0;
BEGIN
IF P_NUM IS NULL THEN
RETURN NULL;
END IF;
FOR I IN 1..LENGTH(P_NUM) LOOP
CASE SUBSTR(P_NUM, I, 1)
WHEN '0' THEN NULL;
WHEN '1' THEN NULL;
WHEN '2' THEN NULL;
WHEN '3' THEN NULL;
WHEN '4' THEN NULL;
WHEN '5' THEN NULL;
WHEN '6' THEN NULL;
WHEN '7' THEN NULL;
WHEN '8' THEN NULL;
WHEN '9' THEN NULL;
WHEN '.' THEN
V_NUM_DOT := V_NUM_DOT + 1;
IF V_NUM_DOT > 1 THEN
RETURN 'N';
END IF;
WHEN '-' THEN
IF I != 1 THEN
RETURN 'N';
END IF;
WHEN '+' THEN
IF I != 1 THEN
RETURN 'N';
END IF;
ELSE RETURN 'N';
END CASE;
END LOOP;
RETURN 'T';
END;
假如输入的参数以数字类型为主,则两者效率差不多。
假如输入的参数大部分无法转化为数字类型,则第二种方法的效率会更高。
假如不采用TO_NUMBER而是使用对字符串中每个字符依次判断的方法,则会增加复杂的程度。
收藏
举报
TAG:
Oracle学习