sql截取字符串

云想慕尘 2008-09-29 11:56:11
sql问题:
Declare str varchar(100)
SET str='aaa,bb,ccc,d,ee,ffff'
我想把str按逗号截取成多个变量,怎么截呢?
注:str中逗号个数不固定,因此最后生成的变量个数也不固定
...全文
780 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
云想慕尘 2008-09-30
  • 打赏
  • 举报
回复
我好像把问题说得不够明白,我再强调一点,就是:
我最后要生成多个变量(个数不固定,因此需要再循环里给变量命名),然后同时对多个变量进行操作。
同时对多个变量进行操作才是我的最终目的
云想慕尘 2008-09-30
  • 打赏
  • 举报
回复
太晚了,明天再看,谢谢大家了
csdyyr 2008-09-29
  • 打赏
  • 举报
回复

Declare @str varchar(1000)
SET @str='aaa,bb,ccc,d,ee,ffff'
set @str=replace(@str,',',''' union all select ''')
exec('select col=''' + @str+'''')
hyqwan11112 2008-09-29
  • 打赏
  • 举报
回复

--学楼主把@弄掉了
/*------------------------
Declare @str varchar(100)
SET @str='aaa,bb,ccc,d,ee,ffff'
while charindex(',',@str)>0
begin
print left(@str,charindex(',',@str)-1)
--left(@str,charindex(',',str)-1)这块就是循环截取下来的每一部分,对其进行操作就可以了
set @str = stuff(@str,1,charindex(',',@str),'')
end
------------------------*/
aaa
bb
ccc
d
ee
水族杰纶 2008-09-29
  • 打赏
  • 举报
回复
if object_id('dbo.fn_split')is not null drop function dbo.fN_split
go
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='aaa,bb,ccc,d,ee,ffff'

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

/*
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
aaa
bb
ccc
d
ee
ffff

(影響 6 個資料列)
*/
-狙击手- 2008-09-29
  • 打赏
  • 举报
回复
Declare @str varchar(100) 
SET @str='aaa,bb,ccc,d,ee,ffff'


select top 2000 id=identity(int,1,1) into # from syscolumns a,syscolumns b
select
iNewDesc=substring(a.iDesc,b.id,charindex(',',a.iDesc+',',b.id)-b.id)
from (select @str as idesc ) a, # b
where substring(','+a.iDesc,b.id,1)=','
order by a.idesc,b.id

drop table #
/*
iNewDesc
----------------------------------------------------------------------------------------------------
aaa
bb
ccc
d
ee
ffff

(所影响的行数为 6 行)
*/
hyqwan11112 2008-09-29
  • 打赏
  • 举报
回复

Declare @str varchar(100)
SET @str='aaa,bb,ccc,d,ee,ffff'
while charindex(',',str)>0
begin
print left(@str,charindex(',',str)-1)
--left(@str,charindex(',',str)-1)这块就是循环截取下来的每一部分,对其进行操作就可以了
set @str = stuff(@str,1,charindex(',',str),'')
end
-狙击手- 2008-09-29
  • 打赏
  • 举报
回复
写个函数

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧