日期:2014-05-19  浏览次数:20760 次

取出一字符串中的数字.
请问怎么样将一字符串中的数字给取出.
如:

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 "
楼主要什么样的结果呢?
------解决方案--------------------