我有一个字符串:
@TempCol = sigma_x1,sigma_x2,...,sigma_xd,XX,YY,ZZ
那么我怎么能得到该字符串的特定部分,基于,比方说,索引。 所以
以前 Andriy M 解决了类似问题,他的代码获取了一个基于nomber的子字符串,但是以下列方式返回子字符串:
如何更新此过程以获取特定元素?
DECLARE @TempCol varchar(max), @d int, @p int, @Result varchar(max);
SET @TempCol = 'item1,item2,itemA,itemB,item#,item$';
SET @d = 3;
SET @p = 1;
WHILE @d > 0 AND @p > 0 BEGIN
SET @p = CHARINDEX(',', @TempCol, @p);
IF @p > 0 SET @p = @p + 1;
SET @d = @d - 1;
END;
IF @p = 0
SET @Result = @TempCol
ELSE
SET @Result = SUBSTRING(@TempCol, 1, @p - 2);
SELECT @Result;
答案 0 :(得分:1)
试试吧。希望这能满足您的需求。
创建一个函数GetIndex
,它接受字符串和分隔符来分割字符串
CREATE FUNCTION dbo.GetIndex(@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (itemindex int identity(1,1), items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
你可以查询,如 假设您需要第4个索引
select * from dbo.GetIndex(@TempCol,',') where itemindex = 4
获取第4个索引的项目
select items from dbo.GetIndex(@TempCol,',') where itemindex = 4
将项目添加到变量
select @Aux = items from dbo.GetIndex(@TempCol,',') where itemindex = 4