取出一字符串中的数字.
请问怎么样将一字符串中的数字给取出.
如:
as2.212af
daw2.12fa
dfd21dfas
得到
2.212
2.12
21
------解决方案--------------------有意思,抢个SF坐着听...
------解决方案--------------------用SQL语言来做?
------解决方案--------------------写个函数取吧
create function fn_num(
@str varchar(60)
)
returns varchar(60)
as
begin
declare @r varchar(60)
set @r= ' '
while PATINDEX( '%[0-9.]% ',@str)> 0
begin
set @str=stuff(@str,1,PATINDEX( '%[0-9.]% ',@str)-1, ' ')
if PATINDEX( '%[^0-9.]% ',@str)> 0
begin
set @r=@r+left(@str,PATINDEX( '%[^0-9.]% ',@str)-1)
set @str=stuff(@str,1,PATINDEX( '%[^0-9.]% ',@str)-1, ' ')
end
else
begin
set @r=@r+@str
set @str= ' '
end
end
return @r
end
go
--调用
select dbo.fn_num( 'as2.212af ')
--结果
2.212
------解决方案--------------------create function fn_GetNum(@s varchar(8000))
returns varchar(8000)
as
begin
select @s = stuff(stuff(@s, 1, patindex( '%[0-9, .]% ', @s) - 1, ' '),
patindex( '%[^0-9, .]% ', stuff(@s, 1, patindex( '%[0-9, .]% ', @s) - 1, ' ')),
len(@s), ' ')
return @s
end
declare @t table(s varchar(8000))
insert @t select 'as2.212af '
union all select 'daw2.12fa '
union all select 'dfd21dfas '
select dbo.fn_GetNum(s) as result from @t
/*
result
----------
2.212
2.12
21
(所影响的行数为 3 行)
*/
------解决方案--------------------To: Haiwer(海阔天空) ( ) 信誉:138
select dbo.fn_num( 'as2.212a22f ')
= 2.21222
------解决方案--------------------如果是 "sf3.456dadef34.32 "
楼主要什么样的结果呢?
------解决方案--------------------顶