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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM