日期:2014-05-18  浏览次数:20586 次

如何切分字符并把结果插入临时表中
"北京   上海   南京   重庆   天津 "     (内容可能是任何城市)
中间是空格分开的,如何切成
北京
上海
南京
重庆  
天津

并把结果插入临时表中

------解决方案--------------------
create function f_splitStr(@s varchar(8000),@split varchar(10))
returns @tb table(col varchar(100))
as
begin
declare @t table(id int identity,b bit)
insert @t select top 500 0 from syscolumns a,syscolumns b

insert @tb select substring(@s,id,charindex(@split,@s+@split,id)-id)
from @t
where id <=len(@s+ '! ') and charindex(@split,@split+@s,id)=id

return
end
go

select * into # from dbo.f_splitStr( '北京 上海 南京 重庆 天津 ', ' ')
select * from #

drop function f_splitStr
drop table #

------解决方案--------------------
create table #(col varchar(100))
declare @s varchar(8000)
declare @split varchar(10)
set @s= '北京 上海 南京 重庆 天津 '
set @split= ' '
declare @splitlen int
set @splitlen=len(@split+ 'a ')-2
print @splitlen
while charindex(@split,@s)> 0
begin
insert # values(left(@s,charindex(@split,@s)-1))
set @s=stuff(@s,1,charindex(@split,@s)+@splitlen, ' ')
end
insert # values(@s)
select * from #

drop table #


------解决方案--------------------
稍微修改下那段代碼即可

Create Table #T(ID Varchar(100))
declare @str varchar(8000)
set @str= '北京 上海 南京 重庆 天津 '
select @str=replace(@str, ' ', ' ' ' union select ' ' ')
set @str= 'select ' ' '+@str+ ' ' ' '
Insert #T exec(@str)
Select * From #T
Drop Table #T
/*
----
北京
南京
上海
天津
重庆
*/
------解决方案--------------------
declare @str varchar(8000)
create table #(area varchar(8))
set @str= '北京 上海 南京 重庆 天津 '
select @str= 'insert into # select ' ' '+replace(@str, ' ', ' ' ' union select ' ' ')+ ' ' ' '
exec(@str)

select * from #

/*
area
----
北京
南京
上海
天津
重庆
*/