我在SQL Server 2008中有一个过程,我有一个查询如下:
SELECT @symbol += N'' + acc_no FROM dbo.sav_acc_mcg where scheme_id = @scheme_id and status in (1,2) order by acc_no
从表中提取所有“acc_no”并将其保存到@symbol中。但“acc_no”的长度可以单独变化。所以我想我可以使用分隔符来分隔每个“acc_no”,然后使用循环通过检查分隔符来提取每个单词“acc_no”。另外我需要计算“acc_no”的数量。 如果每个“acc_no”的长度相同且没有分隔符,例如10。我可以使用以下代码来计算“acc_no”的数量:
@count = len(@symbol)/10
要提取每个“acc_no”,我可以使用以下代码:
@loop = 0
在while循环中运行下面的代码,直到@ loop< @count:
@acc_no = SUBSTRING(@symbol, (@loop*10)+1 , 10)
...................等
但是由于“acc_no”的长度不同,上述代码将无效。
如何完成工作。 我的要求是: 如果
@symbol = PS-000001,GS-000002,CFS-000008,NS001-000016,CFS-000017,LS2-000019,......etc
我需要计算“acc_no”的数量,然后为我的其他工作提取每个“acc_no”。
欢迎提供帮助。
答案 0 :(得分:1)
我认为这可以胜任。
while @index1 < LEN(@symbol)
begin
set @index2 = CHARINDEX(',',@symbol,@index1)
set @op = substring(@symbol,@index1,@index2-@index1)
print @op
set @index1 = @index2+1
end