字符串出理

sisiz 2008-04-01 10:10:15
@picTag nvarchar(200)
AS
declare @str nvarchar(200)
set @str='a936d1ed-e567-486d-9899-01e0a6020f97.jpg 659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg 6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg'
str是用空格隔开的,循环要读取
a936d1ed-e567-486d-9899-01e0a6020f97.jpg
659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg
6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg


我的思路是
while (条件)
@strname=a936d1ed-e567-486d-9899-01e0a6020f97.jpg


不知道怎么写?
...全文
33 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zanyzyg 2008-04-01


charindex
速度更快,呵呵
回复
zanyzyg 2008-04-01
begin
declare @str nvarchar(200)
declare @name nvarchar(100)
set @str='a936d1ed-e567-486d-9899-01e0a6020f97.jpg 659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg 6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg'
set @name=''
while len(@str)>0
begin
if substring(@str,1,1)='' begin select @name set @name='' end
else set @name=@name+substring(@str,1,1)
set @str=substring(@str,2,len(@str)-1)
end
select @name
end
回复
-狙击手- 2008-04-01
/*
功能:实现split功能的函数
*/

create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as

begin
declare @i int

set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)

while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))

set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end

if @inputstr <> '\'
insert @temp values(@inputstr)

return
end
go

--调用

declare @s varchar(1000)

set @s='a936d1ed-e567-486d-9899-01e0a6020f97.jpg 659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg 6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg'

select * from dbo.fn_split(@s,' ')

drop function dbo.fn_split


/*
a
------------------------------------------------
a936d1ed-e567-486d-9899-01e0a6020f97.jpg
659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg
6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg

(所影响的行数为 3 行)
*/


回复
nextflying 2008-04-01
declare @str nvarchar(200)
set @str='a936d1ed-e567-486d-9899-01e0a6020f97.jpg 659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg 6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg'
declare @pos int
set @pos = CHARINDEX( ' ' , @str ,0)
while( @pos > 0)
begin
select left(@str , @pos)
set @pos = CHARINDEX( ' ' , @str ,0)
set @str = right(@str , len(@str) - @pos)
end


给个结果也不怎么感觉实用,自己选择吧
回复
nextflying 2008-04-01
1 楼妙解 但不怎么实用
回复
viva369 2008-04-01

declare @str nvarchar(200)
set @str='a936d1ed-e567-486d-9899-01e0a6020f97.jpg 659c2e3d-9f3e-4c2a-aaf3-5be593017586.jpg 6a0f4c7f-542b-4eb3-8dfc-7dc30013bf94.jpg'
set @str = replace(@str,' ',' ''union all select'' ')
exec ('select ''' + @str + '''')
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-01 10:10
社区公告
暂无公告