我有一个栏是字符串类型,里面可能是数字,也可能是非数字。。
select * from [Table] where cint(FieldName)>cint('1234')
我想找出大过某些数的资料。如果数据库里全是数字,当然很正常,要是有一两条是非数字的话,自然就出错了。
请问各位有无好的解决办法? 可以先 isnumeric 再  cint?非常感谢

解决方案 »

  1.   

    select * from [Table] where cint(cast(FieldName as int))>cint('1234') 这样?先转成整型
      

  2.   

    但內如如果不是數字, Cast 转不到,会出错呀,是吗
      

  3.   

    剛看到楼上的贴“请问,delete一亿条数据怎么快”有这句:
    select * into new_table from old_table难道我也先把数字的选出来,放在新表,再选?
      

  4.   

    declare @i as varchar(10)
    set @i = '......'select * from [Table] where ISNUMERIC(FieldName) = 1 and cast(fieldname as int) > cast(@i as int) 
      

  5.   

    可以select * into # from [Table] where ISNUMERIC(FieldName)=1  --把全数字的取出来select * from # where cint(FieldName)>cint('1234') drop table #
      

  6.   

    declare @i as varchar(10) -- 10不够,自己加大
    set @i = '......'select * from [Table] where (ISNUMERIC(FieldName) = 1 and cast(fieldname as int) > cast(@i as int)) or (ISNUMERIC(FieldName) = 0 and FieldName > @i )select * from [Table] where (ISNUMERIC(FieldName) = 1 and cast(fieldname as int) > cast(@i as int)) or (ISNUMERIC(FieldName) = 0 and cast(FieldName as varchar) > @i )
     
      

  7.   

    首先非常多謝两位的回复。我有少少疑问,Q1 如果是 ACCESS呢? 
    Q2 请问   ISNUMERIC(FieldName) = 1 这句的效用是?多谢
      

  8.   

    ISNUMERIC ( expression )当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。
      

  9.   

     ISNUMERIC(FieldName) 
     参数是 fieldName, 能选出 这个Field 里面 是 数字类型的 数据?
      

  10.   

    多谢回复
    我查询出错。
    我还是有题目中的那个疑问: 就是 ISNUMERIC(FieldName) = 1 and cast(fieldname as int)  这一句是并列进行的, 他不会先过滤了ISNUMERIC 再 做Cast
    因此,如果有 非数字类型,就会出错。
      

  11.   

    那就不要写成一句SQL,写成存储过程或函数。
    也可以写
    select * from (select * from [table] where isnumberic(fieldname)=1) m where cast(m.fieldname as int)>@i 
      

  12.   

    only_endure 写的是先选出整数数据 作为一个set, 再在这个set里select。。我就是想要这种效果可是上面的代码我执行失败了。
    不管怎么样,多谢你的帮助先。