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

如何将字符切成几个
"北京   上海   南京   重庆   天津 "     (内容可能是任何城市)
中间是空格分开的,如何切成
北京
上海
南京
重庆  
天津

------解决方案--------------------
declare @str varchar(8000)
set @str= '北京 上海 南京 重庆 天津 '
select @str=replace(@str, ' ', ' ' ' union select ' ' ')
set @str= 'select ' ' '+@str+ ' ' ' '
exec(@str)

/*
----
北京
南京
上海
天津
重庆
*/
------解决方案--------------------
declare @s varchar(4000)
set @s= '北京 上海 南京 重庆 天津 '
set @s= 'select ' ' '+replace(@s, ' ', ' ' ' union select ' ' ')+ ' ' ' '
exec(@s)
------解决方案--------------------
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 * from dbo.f_splitStr( '北京 上海 南京 重庆 天津 ', ' ')

drop function f_splitStr

北京
上海
南京
重庆
天津

------解决方案--------------------
DECLARE @s nvarchar(max)
SET @s = N '北京 上海 南京 重庆 天津 '

;WITH
A AS(
SELECT re = CONVERT(xml,
N ' <r> <c> <![CDATA[ '
+ REPLACE(@s, N ' ', N ']]> </c> <c> <![CDATA[ ')
+ N ']]> </c> </r> ')
)
SELECT
T.c.value( '.[1] ', 'nvarchar(100) ')
FROM A
OUTER APPLY A.re.nodes( '/r/c ') T(c)

-- 结果:
---------------
北京
上海
南京
重庆
天津

(5 行受影响)