--透過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 dualWHERE 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;
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 dualWHERE 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;