1、创建测试表,
create table test_num(id varchar2(20),remark varchar2(20));
2、插入测试数据,部分值含回车换行符;
insert into test_num values('123a', '123a');
insert into test_num values('456', '456');
insert into test_num values('78.9', '78.9');
insert into test_num values('-123', '-123');
commit;
3、查询表中全量数据;select t.*, rowid from test_num t;
4、编写语句,只查询字段ID全为数字的记录,可以发现结果中只有一条记录;
select t.*, rowid sec from test_num t where not regexp_like(id,'\D');
额,正好以前写过一个
oracle本身没有,得自定义一个函数
create or replace function isNumber(p in varchar2)
return number
is
result number;
begin
result := to_number(p);
return 1;
exception
when VALUE_ERROR then return 0;
end;
调用
select isNumber('abc123') from dual
或者
select isNumber('123') from dual
返回值为1,说明是数字,返回值是0,说明里边包含非数字的字符
2014-01-10 · 知道合伙人软件行家
知道合伙人软件行家
向TA提问 私信TA
用户oracle的正则函数regexp_instr就行了。
select regexp_instr('65','[1-9][0-9]?$') from dual ;
测试:
sys@STARTREK> select regexp_instr('65','[1-9][0-9]?$') from dual ;
REGEXP_INSTR('65','[1-9][0-9]?$')
---------------------------------
1
sys@STARTREK> select regexp_instr('0','[1-9][0-9]?$') from dual ;
REGEXP_INSTR('0','[1-9][0-9]?$')
--------------------------------
0
sys@STARTREK> select regexp_instr('1d','[1-9][0-9]?$') from dual ;
REGEXP_INSTR('1D','[1-9][0-9]?$')
---------------------------------
0
大于0表示为数字,等于0表示非数字。