当前位置:Gxlcms > 数据库问题 > Oracle中如何判断字符串是否全为数字

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

时间:2021-07-01 10:21:17 帮助过:20人阅读

通过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;

 

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

标签:正则   函数   http   substr   功能   学习   bsp   loop   正则表达   

人气教程排行