oracle中有无'在1个字符串中查找非数字'的函数

时间:2022-12-02 15:03:55
意思就是,在1个字符串中,能否判断出该字符串中含有非数字的字符

8 个解决方案

#1


一种方法就是采用ORACLE 10G的正则表达式
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转换,如遇异常则有非数字,没有则没有

#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]+$’)

#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转换,如遇异常则有非数字,没有则没有

#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>