首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【DB笔试面试458】在Oracle中,如何判断一个字符串是否全为数字?

【DB笔试面试458】在Oracle中,如何判断一个字符串是否全为数字?

作者头像
AiDBA宝典
发布2019-09-30 17:08:23
发布2019-09-30 17:08:23
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

题目部分

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

答案部分

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

第一种办法示例:

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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;

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

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

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档