现在有一个字段A是char(5) 类型的 。表里面有好多错误数据正确的 是在10001 到 10008之间的  我现在在存储过程 想把 不是这个范围的找出来 。
这里面的值不只都是 10001、这种格式。还有空的 还有带字母的。。我就是想把 空的 带字母的和不再以上范围的找出来 。。我写了判断跑到半截就报错。
怎么写 存储

解决方案 »

  1.   

    这种需求 不用正则 多可惜啊select *
      from t
     where not regexp_like(t.a, '+[^[:digit:]$]+')
       and length(t.a) = 5;
      

  2.   

    还有个范围:
    select *
      from t
     where not regexp_like(t.a, '+[^[:digit:]$]+')
       and length(t.a) = 5
       and t.a between '10001' and '10008';
      

  3.   

    这种问题讨论了很多了哈、方法大概会有三种
    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;A
    ----------
    abc
    cde
    efd4554
      

  4.   

    translate 怎么玩的?
    sys@ORCL> select * from t where translate(a,'x0123456789','x') is null;A
    ----------
    123
    456122
      

  5.   


    你定义的这个变量是什么类型的?数据库这个字段是char(5) 
    我定义的 对应的 是number 的 
      

  6.   


    你定义的这个变量是什么类型的?数据库这个字段是char(5) 
    我定义的 对应的 是number 的 
    .....一个sql能搞定的事,还用游标 逐条处理干嘛。3# 的函数 里面也有出错的处理思路。你看下修改你的代码即可。