失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Oracle中如何判断字符串是否全为数字

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

时间:2019-07-09 02:50:35

相关推荐

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

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

学习了:/zrcoffee/archive//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')DECLAREstr VARCHAR2(10) := '123a';val NUMERIC(10);iint;kint;flag BOOLEAN;BEGINflag := TRUE;for i in 1..10 loop --新密码是否6位数字k := ascii(substr(str, i, 1));if k < 48 or k > 57 THENflag := FALSE;end if;end LOOP;IF flag = true THENdbms_output.put_line(str || '是[0-9]的数字序列');ELSEdbms_output.put_line(str || '不是[0-9]的数字序列');END IF;END;-- 调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常DECLAREstr VARCHAR2(10) := '123';val NUMERIC(10);BEGINval := CAST(str AS NUMERIC);dbms_output.put_line(str || '是[0-9]的数字序列');EXCEPTIONWHEN value_error THEN -- 字符串转实数错误--dbms_output.put_line(SQLCODE || ', ' || SQLERRM);dbms_output.put_line(str || '不是[0-9]的数字序列');END;--调用translate函数,剔除所有[0-9]数字后,看是否为空串DECLAREstr VARCHAR2(10) := '123abc';BEGINIF replace(translate(str, '0123456789', '0'), '0', '') IS NULL THENdbms_output.put_line(str || '是[0-9]的数字序列');ELSEdbms_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浙江23昆 山4苏 3';str VARCHAR2(100) := ' 护照浙江昆 山苏 4';ret VARCHAR2(10);BEGINret := TRIM(TRANSLATE(str, trim(TRANSLATE(str, '1234567890', '')), ' '));dbms_output.put_line(ret);END;

如果觉得《Oracle中如何判断字符串是否全为数字》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。