如何将字符切成几个
"北京 上海 南京 重庆 天津 " (内容可能是任何城市)
中间是空格分开的,如何切成
北京
上海
南京
重庆
天津
------解决方案--------------------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 行受影响)