字段A444
555
硕士
aa求当字段A的内容是数字的时候并且当大于300的时候的所有行

解决方案 »

  1.   

    按楼上的意思该字段是定义的varchar,既然是字符型,又是数字,又是abc,现要判断其>300,明显就是设计失误。当然,直接varchar转number判断试试看也行,参考oracle函数。
      

  2.   

    绝对不是设计上的失误,如果直接用to_number函数转会报错,因为其中有的数据是字母
      

  3.   

    select * from 
    (select case when translate(a,'a123456789','a') is not null then 0 else a end cola
    from tablename)
    where cola>300
      

  4.   

    select * from 
    (select case when translate(a,'a0123456789','a') is not null then 0 else to_number(a) end cola
    from tablename)
    where cola>300;orselect *
    from tablename
    where to_number(a)>300 and translate(a,'a0123456789','a') is null; 
      

  5.   

    后面的WHERE条件顺序不要颠倒。
      

  6.   

    写个函数
    create or replace function GetNumber(para varchar2) return number is
    begin
        return to_number(para);
    exception
        when INVALID_NUMBER then 
            return -999999;
    end;
    这个函数判断一个字符串是不是数字,如果是则返回该值, 不是则返回-999999 (再小点也没关系,不要超过上限就行)然后SQL就简单啦~~
    select * from talbe
    where GetNumber(A)>300;
    优点:可读性极高~
    缺点:没啥缺点~ 就是要写个PL/SQL而已 :)
      

  7.   

    sozdream()你的方法很好但是我运行了有点毛病,不过我改过来了,你给了我很好的一个思路,非常感谢!
      create or replace function GetNumber(para varchar2) return number is
    begin
        return to_number(para);
    exception
        when VALUE_ERROR then //把INVALID_NUMBER 改成 VALUE_ERROR 
            return -999999;
    end;