create function  getNum(@str varchar(1000))
returns varchar(20)
as
begin
declare @i int,@tstr varchar(20)
set @tstr=''
set @i=0
while @i<len(@str) 
begin
  set @i=@i+1
  if ASCII(substring(@str,@i,1))>47 and ASCII(substring(@str,@i,1))<58
    set @tstr=@tstr+substring(@str,@i,1)
end
return @tstr
end
-- 测试
select dbo.getNum('支持072号选手')

解决方案 »

  1.   

    create function  getNum(@str varchar(1000))
    returns varchar(20)
    as
    begin
    declare @i int,@tstr varchar(20)
    set @tstr=''
    set @i=0
    while @i<len(@str) 
    begin
      set @i=@i+1
      if ASCII(substring(@str,@i,1))>47 and ASCII(substring(@str,@i,1))<58
        set @tstr=@tstr+substring(@str,@i,1)
    end
    return @tstr
    end-- 测试select dbo.getNum('sdfsfd123')
      

  2.   

    create function f_getNum(@var varchar(1000))
    returns varchar(1000)
    as
    begin
        declare @ret varchar(1000)
        set @ret = ''
        while(len(@var)>0)
        begin
            set @ret = @ret + case when ISNUMERIC(left(@var,1))=1 and left(@var,1)!='.' then left(@var,1) else '' end
            set @var = right(@var,len(@var)-1)
        end
        return @ret
    endselect dbo.f_getNum(msginfo) from 表
      

  3.   

    create function f_getNum(@col nvarchar(100))
    returns nvarchar(100)
    as
      begin
        declare @return  nvarchar(100)
        set @return=''
        while patindex('%[0-9]%',@col)>0
          begin
            set @return=@return+cast(substring(@col,patindex('%[0-9]%',@col),1) as nvarchar(100))
            set @col=stuff(@col,patindex('%[0-9]%',@col),1,'')
          end 
        return(@return)
      end
    go
    select dbo.f_getNum('支持072号选手')
    ---select dbo.f_getNum('msginfo') from 表drop function f_getNum
      

  4.   

    Select Count(*) From Table1 Where CHARINDEX('072',msginfo) > -1