• Oracle 判断某個字段的值是不是数字


    转:https://my.oschina.net/bairrfhoinn/blog/207835
    摘要: 壹共有三种方法,分别是使用 to_number()、regexp_like() 和 translate() 三种函数来进行匹配。如果字段的值是数字,返回1,否则返回0。由于 Oracle 数据库本身没有提供检测字段是否为数字的方法,因此我们需要自行创建壹個 isnumeric() 的函数,然后再调用它来进行判断。

    壹共有三种方法,分别是使用 to_number()、regexp_like() 和 translate() 三种函数来进行匹配。如果字段的值是数字,返回1,否则返回0,具体的实现如下,三种方法任选壹种即可。运行结果:如果字符串是数字格式则返回1,不是则返回0。

    --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、利用 regexp_like
    CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
        RETURN NUMBER
    IS
    BEGIN
        IF str IS NULL
        THEN
           RETURN 0;
        ELSE
           IF regexp_like (str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$')
           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 数据库本身没有提供检测字段是否为数字的方法,因此我们需要自己创建壹個 isnumeric() 的函数,然后再调用它来进行判断。具体的调用方式如下:
    SQL> select isnumeric('123a') from dual;
    ISNUMERIC('123A')
    -----------------
                    0
    
    SQL> select isnumeric('123.509') from dual;
    ISNUMERIC('123.509')
    --------------------
                       1
    
    SQL> select isnumeric('123.205.10.8') from dual;
    ISNUMERIC('123.205.10.8')
    -------------------------
                            0

     

  • 相关阅读:
    BZOJ 3110 【ZJOI2013】 K大数查询
    【mysql的编程专题⑥】视图
    【mysql的编程专题⑤】自定义函数
    MySQL错误代码大全【转载】
    【mysql的编程专题④】存储过程
    【mysql的编程专题③】内置函数
    【mysql的编程专题】触发器
    【mysql的编程专题①】流程控制与其他语法
    多线程监听串口
    IMX6输出可控PWM
  • 原文地址:https://www.cnblogs.com/lucky_dai/p/6197666.html
Copyright © 2020-2023  润新知