博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Oracle中,如何判断一个字符串是否为数字?
阅读量:6961 次
发布时间:2019-06-27

本文共 2585 字,大约阅读时间需要 8 分钟。

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

可以有2种办法来判断,第一种办法为REPLACETRANSLATE函数,在程序中可以直接使用“TRANSLATE(REPLACE('入参','.',''),'/1234567890','/') IS NULL”来判断入参为数字,缺点是,若入参有2个小数点或含有加减号则不能判断。第二种办法为使用TO_NUMBERREGEXP_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;

 

 



About Me

.............................................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub()、博客园()和个人微信公众号()上有同步更新

● 本文itpub地址:

● 本文博客园地址:

● 本文pdf版、个人简介及小麦苗云盘地址:

● 数据库笔试面试题库及解答:

● DBA宝典今日头条号地址:

.............................................................................................................................................

● QQ群号:230161599(满)、618766405

● 微信群:可加我微信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友646634621,注明添加缘由

● 于 2017-11-01 09:00 ~ 2017-11-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

.............................................................................................................................................

小麦苗的微店

小麦苗出版的数据库类丛书

.............................................................................................................................................

使用微信客户端扫描下面的二维码来关注小麦苗的微信公众号()及QQ群(DBA宝典),学习最实用的数据库技术。

   小麦苗的微信公众号      小麦苗的DBA宝典QQ群2     《DBA笔试面宝典》读者群       小麦苗的微店

.............................................................................................................................................

你可能感兴趣的文章
scrum 开发方式学习笔记
查看>>
Terraform使用案例
查看>>
Mac下brew方式安装mysql
查看>>
开源的任务队列服务HTQ
查看>>
通过微信小程序看前端
查看>>
[LeetCode] Rotate Function
查看>>
iOS - 更轻量级的 AppDelegate - 面向服务设计
查看>>
什么样的爬虫才是好爬虫:Robots协议探究
查看>>
tomcat 部署多个项目的技巧
查看>>
yii2使用多个数据库的案例
查看>>
[LintCode/LeetCode] Search Insert Position
查看>>
Node处理http跨域请求
查看>>
Gradle for Android 第五篇( 多模块构建 )
查看>>
框架 也可以这样用 easy
查看>>
LCUI 1.1.0 Beta 发布,C 的图形界面库
查看>>
Base64
查看>>
MariaDB(mysql)之半同步复制及复制过滤器的使用
查看>>
WCF Ria Service 理解制图版本【待续】
查看>>
【IOS】高仿糗事百科客户端(基本实现了除注册,评论之外的功能)
查看>>
puppet之模块详解
查看>>