• Oracle中如何判断字符串是否全为数字


    Oracle中如何判断字符串是否全为数字

    学习了:http://www.cnblogs.com/zrcoffee/archive/2012/12/11/2812744.html

    本文介绍了判断字符串是否全为数字的4种办法,另外还介绍了一个translate函数的小技巧,从任意字符串中提取数字(调用2次translate函数)。这个办法是一个公司同事发现的,用起来很方便,但理解起来稍有点困难。
    1、通过ASCII码判断是否数字,介于[48, 57]之间,(ascii('0') = 48, ascii('9') = '57')
    2、调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常
    3、调用translate函数,剔除所有[0-9]数字后,看是否为空串
    4、调用正则表达式,进行模式匹配(10g版本新加入的功能)

    --通过ASCII码判断是否数字,介于[48, 57]之间,(ascii('0') = 48, ascii('9') = '57')
    DECLARE
        str             VARCHAR2(10) := '123a';
        val             NUMERIC(10);
        i               int;
        k               int;
        flag            BOOLEAN;
    BEGIN
        flag := TRUE;
        for i in 1..10 loop   --新密码是否6位数字
            k := ascii(substr(str, i, 1));
            if k < 48 or k > 57 THEN
                flag := FALSE;
            end if;
        end LOOP;
        
        IF flag = true THEN
            dbms_output.put_line(str || '是[0-9]的数字序列');
        ELSE
            dbms_output.put_line(str || '不是[0-9]的数字序列');
        END IF;
    END;
    
    -- 调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常
    DECLARE
        str    VARCHAR2(10) := '123';
        val    NUMERIC(10);
    BEGIN
        val := CAST(str AS NUMERIC);
        dbms_output.put_line(str || '是[0-9]的数字序列');
    EXCEPTION
       WHEN value_error THEN -- 字符串转实数错误
           --dbms_output.put_line(SQLCODE || ', ' || SQLERRM);
           dbms_output.put_line(str || '不是[0-9]的数字序列');
    END;
    
    --调用translate函数,剔除所有[0-9]数字后,看是否为空串
    DECLARE
        str VARCHAR2(10) := '123abc';
    BEGIN
        IF replace(translate(str, '0123456789', '0'), '0', '') IS NULL THEN
            dbms_output.put_line(str || '是[0-9]的数字序列');
        ELSE
            dbms_output.put_line(str || '不是[0-9]的数字序列');
        END IF;
    END;
    
    --调用正则表达式,进行模式匹配(10g版本新加入的功能)
    SELECT *
    FROM dual
    WHERE regexp_like('1234', '^[[:digit:]]+$');
    
    --从任意字符串中提取数字串(调用2次translate函数)。
    --假定初始串为str。首先将str中数字全部替换为空格,输出记为str2;
    --其次,对每个在str中出现的任意str2串中字符,如果是str2的首字符则替换为空格,其它字符则全部剔除
    DECLARE
        --str    VARCHAR2(100) := ' 护照01浙江2     3昆 山4苏 3';
        str    VARCHAR2(100) := ' 护照浙江     昆 山苏 4';
        ret    VARCHAR2(10);
    BEGIN
        ret := TRIM(TRANSLATE(str, trim(TRANSLATE(str, '1234567890', '          ')), ' '));
        dbms_output.put_line(ret);
    END;
  • 相关阅读:
    分别用Excel和python进行日期格式转换成时间戳格式
    数据分析之数据质量分析和数据特征分析
    BP neural network optimized by PSO algorithm on Ammunition storage reliability prediction 阅读笔记
    Matlab的BP神经网络工具箱及其在函数逼近中的应用
    js 深拷贝+浅拷贝
    git fork了项目之后修改再push给项目
    微信小程序的开发学习(2)
    Django学习
    小程序的开发学习
    JavaScript-闭包理解
  • 原文地址:https://www.cnblogs.com/stono/p/6671440.html
Copyright © 2020-2023  润新知