欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle中怎么判断字符串是否全为数字,以及从任意字符串中提取数字

更新时间: 2014-01-05 02:04:57 责任编辑: Author_N1

 

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



[SQL] view plaincopy
01.--通过ASCII码判断是否数字,介于[48, 57]之间,(ascii('0') = 48, ascii('9') = '57') 
02.DECLARE 
03.    str             VARCHAR2(10) := '123a'; 
04.    val             NUMERIC(10); 
05.    i               int; 
06.    k               int; 
07.    flag            BOOLEAN; 
08.BEGIN 
09.    flag := TRUE; 
10.    for i in 1..10 loop   --新密码是否6位数字 
11.        k := ascii(substr(str, i, 1)); 
12.        if k < 48 or k > 57 THEN 
13.            flag := FALSE; 
14.        end if; 
15.    end LOOP; 
16.     
17.    IF flag = true THEN 
18.        dbms_output.put_line(str || '是[0-9]的数字序列'); 
19.    ELSE 
20.        dbms_output.put_line(str || '不是[0-9]的数字序列'); 
21.    END IF; 
22.END; 
23. 
24.-- 调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常 
25.DECLARE 
26.    str    VARCHAR2(10) := '123'; 
27.    val    NUMERIC(10); 
28.BEGIN 
29.    val := CAST(str AS NUMERIC); 
30.    dbms_output.put_line(str || '是[0-9]的数字序列'); 
31.EXCEPTION 
32.   WHEN value_error THEN -- 字符串转实数错误 
33.       --dbms_output.put_line(SQLCODE || ', ' || SQLERRM); 
34.       dbms_output.put_line(str || '不是[0-9]的数字序列'); 
35.END; 
36. 
37.--调用translate函数,剔除所有[0-9]数字后,看是否为空串 
38.DECLARE 
39.    str VARCHAR2(10) := '123abc'; 
40.BEGIN 
41.    IF replace(translate(str, '0123456789', '0'), '0', '') IS NULL THEN 
42.        dbms_output.put_line(str || '是[0-9]的数字序列'); 
43.    ELSE 
44.        dbms_output.put_line(str || '不是[0-9]的数字序列'); 
45.    END IF; 
46.END; 
47. 
48.--调用正则表达式,进行模式匹配(10g版本新加入的功能) 
49.SELECT * 
50.FROM dual 
51.WHERE regexp_like('1234', '^[[:digit:]]+$'); 
52. 
53.--从任意字符串中提取数字串(调用2次translate函数)。 
54.--假定初始串为str。首先将str中数字全部替换为空格,输出记为str2; 
55.--其次,对每个在str中出现的任意str2串中字符,如果是str2的首字符则替换为空格,其它字符则全部剔除 
56.DECLARE 
57.    --str    VARCHAR2(100) := ' 护照01浙江2     3昆 山4苏 3'; 
58.    str    VARCHAR2(100) := ' 护照浙江     昆 山苏 4'; 
59.    ret    VARCHAR2(10); 
60.BEGIN 
61.    ret := TRIM(TRANSLATE(str, trim(TRANSLATE(str, '1234567890', '          ')), ' ')); 
62.    dbms_output.put_line(ret); 
63.END; 
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:04:57
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/5386/
本文WWW.DOC100.NET DOC100.NET版权所有。