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
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
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)
a
12双/个
12.385千克/件
执行完后应该是表
a
12
12.385
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千克/件)')
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