如何判断一个字符串的内容是否是数值

上一篇 / 下一篇  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学习

 

评分:0

我来说两句

Open Toolbar