现在有一个字段A是char(5) 类型的 。表里面有好多错误数据
正确的 是在10001 到 10008之间的 我现在在存储过程 想把 不是这个范围的找出来 。
这里面的值不只都是 10001、这种格式。还有空的 还有带字母的。。我就是想把 空的 带字母的和不再以上范围的找出来 。。我写了判断跑到半截就报错。
怎么写
存储
------解决方案--------------------
这种需求 不用正则 多可惜啊。。。
select *
from t
where not regexp_like(t.a, '+[^[:digit:]$]+')
and length(t.a) = 5;
------解决方案--------------------
这种问题讨论了很多了哈、方法大概会有三种
to_number <==通用型
transalte <==好像是最简单的
还有就是10g的正则表达式 <==会有版本问题
我拿to_number实现一个
sys@ORCL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
2 RETURN NUMBER
3 IS
4 v_str FLOAT;
5 BEGIN
6 IF str IS NULL
7 THEN
8 RETURN 0;
9 ELSE
10 BEGIN
11 SELECT TO_NUMBER (str)
12 INTO v_str
13 FROM DUAL;
14 EXCEPTION
15 WHEN INVALID_NUMBER
16 THEN
17 RETURN 0;
18 END;
19 RETURN 1;
20 END IF;
21* END isnumeric;
sys@ORCL> /
sys@ORCL> insert into t values('abc');
1 row created.
sys@ORCL> insert into t values('123');
1 row created.
sys@ORCL> insert into t values('cde');
1 row created.
sys@ORCL> insert into t values('456122');
1 row created.
sys@ORCL> insert into t values('efd4554');
1 row created.
sys@ORCL> insert into t values (NULL);
1 row created.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select * from t where isnumeric(a) != 1;