sql="select * from table1 where field1 between '20' and '9'"这样会得到首字母为2 到 9 之间的所有数据,可能不全正确,但可以减少范围

解决方案 »

  1.   

    如果字符串中只有一个连续的整数数字子串,则
    where cast(substring
    (field1,
    patinedx('%[0-9]%',field1),
    len(field1)-patinedx('%[0-9]%',field1)-patinedx('%[0-9]%',reverse(field1))+2)
    as int)>20
      

  2.   

    select * 
      from (select * 
              from table1 
              where upper(field1) like '%[^A..Z]%') a
      where cast(field1 as int)>20
    注意:field1不能有非a-z,A-Z,0-9的字符
      

  3.   

    赞同
    yesyesyes() 
    vinsonshen(猪骨褒咸鱼->味道没得顶) 如果字符串中只有一个连续的整数数字子串,则
    where cast(substring
    (field1,
    patindex('%[0-9]%',field1),
    len(field1)-patindex('%[0-9]%',field1)-patindex('%[0-9]%',reverse(field1))+2)
    as int)>20--yesyesyes() 有个小笔误 patinedx 写成patinedx
      

  4.   

    --若数字字符串不是连续的, 而要取出里面的全部数字,则用循环去截取啦~~~
    declare @number varchar(1000)
    declare @mystring varchar(1000)
    select @mystring='sdfaswa34sdfsf25143asdfsdf222asdfa'
    set @number=''
    while @mystring>''
    begin        if(left(@mystring,1) like '%[0-9]%')
            begin
               print left(@mystring,1)
               set @number=@number+left(@mystring,1)
            end
            set @mystring=stuff(@mystring,1,1,'')
    end
    select cast(@number as bigint)--显示结果
    3425143222
      

  5.   

    --建立个函数吧
    create function f_didoleo(
    @field1 varchar(8000)
    )returns bigint
    as
    begin
    declare @number varchar(1000)
    set @number=''
    while @field1>''
    begin        if(left(@field1,1) like '%[0-9]%')
            begin
               
               set @number=@number+left(@field1,1)
            end
            set @field1=stuff(@field1,1,1,'')
    end
    return(cast(@number as bigint))
    end
    go--然后调用
    select * from table1 where dbo.f_didoleo(field1)>20