拆分一个字符串

chenye111 2006-02-21 02:18:26
有一个变量
@aa='1:23;2:3;3:4;4:45;5:45'
需要把:后面的数加起来
也就是计算23+3+4+45+45
注:@aa变量(如1:23、2:3)不固定的
...全文
122 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2006-02-21
  • 打赏
  • 举报
回复
declare @s varchar(8000)
set @s='1:23;2:3;3:4;4:45;5:45'
set @s = ';'+@s
while charindex(':',@s)>0
begin
select @s = stuff(@s,charindex(';',@s),charindex(':',@s)-charindex(';',@s)+1,'+')
end
set @s = stuff(@s,1,1,'')
print @s
exec('select '+@s)
/*
23+3+4+45+45

-----------
120

*/


chenye111 2006-02-21
  • 打赏
  • 举报
回复
回复happyflystone(仙林幽谷客):
其中有:与;
两种分隔符
而不是一种
chenye111 2006-02-21
  • 打赏
  • 举报
回复
注:@aa变量(如1:23、2:3)不固定的
------------------
关键是格式不固定,可能还有别的分隔符号在里面


回复:没有其他的分隔符了

子陌红尘 2006-02-21
  • 打赏
  • 举报
回复
declare @aa varchar(1000),@bb varchar(1000)
set @aa='1:23;2:3;3:4;4:45;5:45'
set @bb=''
while charindex(';',@aa)>0
begin
set @aa=stuff(@aa,1,charindex(':',@aa),'')
set @bb=@bb+left(@aa,charindex(';',@aa))
end
set @aa=stuff(@aa,1,charindex(':',@aa),'')
set @bb=replace(@bb,';','+')+@aa
exec('select '+@bb)

/*
------
120
*/
子陌红尘 2006-02-21
  • 打赏
  • 举报
回复
declare @aa varchar(1000),@bb varchar(1000)
set @aa='1:23;2:3;3:4;4:45;5:45'
set @bb=''
while charindex(':',@aa)>0
begin
set @aa=stuff(@aa,1,charindex(':',@aa),'')
set @bb=@bb+left(@aa,charindex(';',@aa))
end
set @aa=stuff(@aa,1,charindex(':',@aa),'')
set @bb=replace(@bb,';','+')+@aa
exec('select '+@bb)

/*
------
120
*/
lsqkeke 2006-02-21
  • 打赏
  • 举报
回复
注:@aa变量(如1:23、2:3)不固定的
------------------
关键是格式不固定,可能还有别的分隔符号在里面
zlp321002 2006-02-21
  • 打赏
  • 举报
回复
--最好的方法,是写一个自定义函数或者存储过程处理.

--然后调用
zlp321002 2006-02-21
  • 打赏
  • 举报
回复
--借下临时表
declare @s varchar(2000),@result varchar(2000)
set @s='1:23;2:3;3:4;4:45;5:45'
select @result= 'select '''+replace(@s,';',''' union all select ''')+''''
Create table #(t varchar(10))
insert into # exec(@result)

select sums=sum(cast(RIGHT(t,LEN(t)-charindex(':',t)) as int)) from #
/*
sums
-----------
120
*/
lsqkeke 2006-02-21
  • 打赏
  • 举报
回复
问题比较复杂 多想想解决方法先
-狙击手- 2006-02-21
  • 打赏
  • 举报
回复
declare @s varchar(8000)
set @s='1;23;2;3;3;4;4;45;5;45'
set @s=replace(@s,';','+')
exec('select '+@s)
/*
-----------
135

*/

22,300

社区成员

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

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