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


 

可以有2种办法来判断,第一种办法为REPLACE加TRANSLATE函数,在程序中可以直接使用“TRANSLATE(REPLACE('入参','.',''),'/1234567890','/') IS NULL”来判断入参为数字,缺点是,若入参有2个小数点或含有加减号则不能判断。第二种办法为使用TO_NUMBER或REGEXP_LIKE来自定义函数进行判断。

第一种办法示例:

SYS@PROD1> SELECT

  2     NVL2(TRANSLATE(REPLACE('12','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE,

  3     NVL2(TRANSLATE(REPLACE('12.34','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE2,

  4     NVL2(TRANSLATE(REPLACE('12.Mabcd','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE3

  5  FROM DUAL;

 

IN_TYP IN_TYP IN_T

------ ------ ----

NUMBER NUMBER CHAR

第二种办法示例:

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. 利用 ISNUMERIC

CREATE OR REPLACE FUNCTION ISNUMERIC(STR IN VARCHAR2) RETURN NUMBER IS

BEGIN

  IF STR IS NULL THEN

    RETURN 0;

  ELSE

    IF REGEXP_LIKE(STR, '(^[+-]?\d{0,}\.?\d{0,}$)') 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;

 

 

©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. windows平台下编辑的内容传到linux平台出现中文乱码的解决办法
  2. PHP mkdir() Permission denied 文件权限不足解决办法
  3. Redis常见问题和解决办法梳理
  4. 笔记本硬盘被格式化了的资料寻回办法
  5. 宝塔面板非https站点使用https访问跳转其他网站内容的处理办法
  6. linux_学习之忘记密码处理办法
  7. 只需要这5招,就能判断你是在和人还是Google智能助理交流!
  8. NAS迁移至OSS,目录迁移是顺序、随机判断
  9. php pdo 插入中文出现乱码解决 办法

随机推荐

  1. Android导航栏资源总结,单纯防丢!
  2. 学习Android 必备 实例大集合
  3. 【Android游戏开发二十一】Android os设
  4. android 网络 post get
  5. Android消息处理系统
  6. android 界面应用锦集
  7. Android(安卓)学习笔记 Contacts Content
  8. Android中解决手机屏幕横竖屏切换问题
  9. android SDK与ADT版本更新问题
  10. 基于 eclipse 的 android 工程如何使用 j