­

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

  • 2019 年 10 月 11 日
  • 筆記

题目部分

在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;

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

About Me:小麦苗

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

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

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

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

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