8 个解决方案
#1
一种方法就是采用ORACLE 10G的正则表达式
select * from emp where REGEXP_LIKE(empno,’^[:punct:]|[0-9]+$’)
select * from emp where REGEXP_LIKE(empno,’^[:punct:]|[0-9]+$’)
#2
是判断有非数字的字符?还是要取出来?
#3
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.7.0
Connected as billing
---大于0代表是非法的数字,等于0代表是数字字符
SQL> select regexp_instr('121212adfazxczxc111111sdfasdsadf','[^[:digit:]]') from dual;
REGEXP_INSTR('121212ADFAZXCZXC
------------------------------
7
SQL> select regexp_instr('1111111111232323','[^[:digit:]]') from dual;
REGEXP_INSTR('1111111111232323
------------------------------
0
SQL> select regexp_instr('aaaaa1111111111232323','[^[:digit:]]') from dual;
REGEXP_INSTR('AAAAA11111111112
------------------------------
1
SQL>
#4
我的ORACLE版本是8.1.7.0.1 的,好象用不了
#5
只要判断该字符串没有非数字字符就为真,否则为假
#6
写个函数
使用to_number转换,如遇异常则有非数字,没有则没有
使用to_number转换,如遇异常则有非数字,没有则没有
#7
用decode函数,不过:不知道ORACLE版本是8.1.7.0.1中是否有这个函数!
#8
用个简单的函数吧..
SQL> create or replace function checkNumber(numStr in varchar)
2 return number
3 as
4 o_ret number;
5 num number;
6 begin
7 select to_number(numStr) into o_ret from dual;
8 o_ret:=0;
9 return o_ret;
10 exception
11 when others then
12 o_ret:=1;
13 return o_ret;
14 end;
15 /
Function created
SQL> select decode(checkNumber('1231'),0,'数字','非法数字') from dual;
DECODE(CHECKNUMBER('1231'),0,'
------------------------------
数字
SQL> select decode(checkNumber('123err1'),0,'数字','非法数字') from dual;
DECODE(CHECKNUMBER('123ERR1'),
------------------------------
非法数字
SQL>
#1
一种方法就是采用ORACLE 10G的正则表达式
select * from emp where REGEXP_LIKE(empno,’^[:punct:]|[0-9]+$’)
select * from emp where REGEXP_LIKE(empno,’^[:punct:]|[0-9]+$’)
#2
是判断有非数字的字符?还是要取出来?
#3
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.7.0
Connected as billing
---大于0代表是非法的数字,等于0代表是数字字符
SQL> select regexp_instr('121212adfazxczxc111111sdfasdsadf','[^[:digit:]]') from dual;
REGEXP_INSTR('121212ADFAZXCZXC
------------------------------
7
SQL> select regexp_instr('1111111111232323','[^[:digit:]]') from dual;
REGEXP_INSTR('1111111111232323
------------------------------
0
SQL> select regexp_instr('aaaaa1111111111232323','[^[:digit:]]') from dual;
REGEXP_INSTR('AAAAA11111111112
------------------------------
1
SQL>
#4
我的ORACLE版本是8.1.7.0.1 的,好象用不了
#5
只要判断该字符串没有非数字字符就为真,否则为假
#6
写个函数
使用to_number转换,如遇异常则有非数字,没有则没有
使用to_number转换,如遇异常则有非数字,没有则没有
#7
用decode函数,不过:不知道ORACLE版本是8.1.7.0.1中是否有这个函数!
#8
用个简单的函数吧..
SQL> create or replace function checkNumber(numStr in varchar)
2 return number
3 as
4 o_ret number;
5 num number;
6 begin
7 select to_number(numStr) into o_ret from dual;
8 o_ret:=0;
9 return o_ret;
10 exception
11 when others then
12 o_ret:=1;
13 return o_ret;
14 end;
15 /
Function created
SQL> select decode(checkNumber('1231'),0,'数字','非法数字') from dual;
DECODE(CHECKNUMBER('1231'),0,'
------------------------------
数字
SQL> select decode(checkNumber('123err1'),0,'数字','非法数字') from dual;
DECODE(CHECKNUMBER('123ERR1'),
------------------------------
非法数字
SQL>