declare @s varchar(30)
declare @re varchar(20)
set @re=''
set @s='(12双/箱)(11.835千克/件)'
while patindex('%[0-9.]%',@s)>0
begin
set @re=@re+substring(@s,patindex('%[0-9.]%',@s),1)
set @s=stuff(@s,patindex('%[0-9.]%',@s),1,'a')
end
print @re
--1211.835

解决方案 »

  1.   

    declare @s varchar(30)
    declare @re varchar(20)
    declare @pos int
    declare @oldpos int 
    set @oldpos = -1
    set @re=''
    set @s='(12双/箱)(11.835千克/件)'
    while patindex('%[0-9.]%',@s)>0
    begin
    set @pos=patindex('%[0-9.]%',@s)
    if @pos=@oldpos+1
    begin
    select @re=@re+substring(@s,patindex('%[0-9.]%',@s),1),@oldpos=patindex('%[0-9.]%',@s)
    end 
    else
    select @re=@re+')('+substring(@s,patindex('%[0-9.]%',@s),1),@oldpos=patindex('%[0-9.]%',@s)

    set @s=stuff(@s,patindex('%[0-9.]%',@s),1,'a')
    end
    set @re=stuff(@re,1,1,'')+')'
    print @re
    --(12)(11.835)
      

  2.   

    不好意思,是这样的a字段中的内容是
    a
    12双/个
    12.385千克/件
    执行完后应该是表
    a
    12
    12.385
      

  3.   

    create  function GetValue( @str as nvarchar(100)) 
    returns nvarchar(100)
    begin 
    declare @strSql nvarchar(1000)
    declare @strTotal nvarchar(1000)
    declare @strTemp nvarchar(10)
    declare @intLength int
    declare @intIndex intset @strTotal=''
    set @intLength=len(@str)
    set @intIndex=1
    while (@intLength>0) 
    begin
    set @strTemp=substring(@str,@intIndex,1)
    declare @intValue int
    set @intValue=ascii(@strTemp)
    if(@intValue=40 or @intValue=41 or @intValue=46 or @intValue>=48 and @intValue<=57)
    begin 
    set @strTotal=@strTotal+@strTemp
    end 
    set @intIndex=@intIndex+1
    set @intLength=@intLength-1end
    return @strTotal
    end 
    select dbo.GetValue('(12双/箱)(11.835千克/件)')
      

  4.   

    吼吼,改成函数就成了。
    create function dbo.func(@s varchar(50))
    returns varchar(20)
    as 
    begin
    --declare @s varchar(30)
    declare @re varchar(20)
    declare @pos int
    declare @oldpos int 
    set @oldpos = -1
    set @re=''
    --set @s='(12双/箱)(11.835千克/件)'while patindex('%[0-9.]%',@s)>0
    begin
    set @pos=patindex('%[0-9.]%',@s)
    if @pos=@oldpos+1
    begin
    select @re=@re+substring(@s,patindex('%[0-9.]%',@s),1),@oldpos=patindex('%[0-9.]%',@s)
    end 
    else
    select @re=@re+')('+substring(@s,patindex('%[0-9.]%',@s),1),@oldpos=patindex('%[0-9.]%',@s)

    set @s=stuff(@s,patindex('%[0-9.]%',@s),1,'a')
    end
    if @re=''
    set @re=''
    else
    set @re=stuff(@re,1,1,'')+')'
    return @re
    end 
    --思路是这样,没测试。
    调用的时候 
    select dbo.func(col) as coln ,* from tb