SQL字符串中取数字难题?
在“sddfd123fddfd56fddf78”中分别取得123 、56 、78 怎么做好,用SQL 语言。
------解决方案--------------------declare @str varchar(100)
declare @find varchar(10)
set @str= 'sddfd123fddfd56fddf78 '
set @find= '123 '
if charindex(@find,@str)> 0
select substring(@str, charindex(@find,@str), len(@find))
set @find= '56 '
if charindex(@find,@str)> 0
select substring(@str, charindex(@find,@str), len(@find))
set @find= '78 '
if charindex(@find,@str)> 0
select substring(@str, charindex(@find,@str), len(@find))
------解决方案----------------------?是不是想把全部数字提取出来?
declare @str varchar(100),@tmp varchar(101),@i int
set @str= 'sddfd123fddfd56fddf78 '
set @tmp=@str+ 'a '
while patindex( '%[0-9]% ',@tmp)> 0
begin
set @i=1
while 1=1
begin
if isnumeric(substring(@tmp,patindex( '%[0-9]% ',@tmp)+@i,1))=0 break
set @i=@i+1
end
print substring(@tmp,patindex( '%[0-9]% ',@tmp),@i)
set @tmp=stuff(@tmp,patindex( '%[0-9]% ',@tmp),@i, ' ')
end
/*
123
56
78
*/
------解决方案-------------------- declare @s varchar(100)
declare @i int
declare @len int
declare @str1 varchar(100)
set @s= 'sddfd123fddfd56fddf78 '
set @str1= ' '
set @len=len(@s)
set @i=1
while @i <=@len
begin
if isnumeric(substring(@s,@i,1))> 0
begin
set @str1=@str1+substring(@s,@i,1)
end
else
begin
set @str1=@str1+ ', '
end
set @i=@i+1
end
select replace(@str1, ', ', ' ')
123 56 78
(1 row(s) affected)
------解决方案--------------------DECLARE @n int
declare @a table(name varchar(800))
insert @a
select 'sddfd123fddfd56fddf7 '
set @n=1
declare @b table(name varchar(800))
while(@n <=(select len(name) from @a))
begin
insert @b
select case when isnumeric(substring(name,@n,1))=1 then substring(name,@n,1) end
from @a
set @n=@n+1
end
select * from @b where name is not null
name
----------------------------------------------------------------------------------------------------------------
1
2
3
5
6
7
(所影响的行数为 6 行)
------解决方案-------------------- create table #t
(
s varchar(100)
)
insert into #t
select 'dsf121dfds212 ' union all
select 'er875df212x21 ' union all
select '12df5s8s ' union all
select '78879dsf552 ' union all
select '1dsa215sdf522 '
create function aa(@s varchar(100))
returns varchar(100)
as
begin
declare @i int
declare @len int
declare @str1 varchar(100)
set @str1= ' '