本文介绍了通过索引获取字符串的特定部分?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字符串:

@TempCol = sigma_x1,sigma_x2,...,sigma_xd,XX,YY,ZZ

@TempCol = sigma_x1,sigma_x2,...,sigma_xd,XX,YY,ZZ

那么我怎样才能获得该字符串的特定部分,比如一个索引.所以

So how could I get a specific part of that string, based on, lets say an index.so

  • 如果索引为 0,则获取 sigma_x1
  • 如果索引为 1,则获取 sigma_x2
  • 如果索引为 2,则获取 sigma_x3
  • 如果索引是 d-1,得到 sigma_xd
  • 如果索引是 d,得到 XX,
  • 如果索引是d+1,得到YY等等.

以前Andriy M 解决了一个类似的问题,他的代码根据一个数字获取一个子字符串,但通过以下方式返回一个子字符串:

Previously Andriy M solved a similar issue, his code gets a substring based on a nomber but returns a substring the following way:

  • 如果@d 是 1,得到 sigma_x1
  • 如果@d 是 2,得到 sigma_x1,sigma_x2
  • 如果@d 是 3,得到 sigma_x1,sigma_x2,sigma_x3
  • 如果@d 是 4,得到 sigma_x1,sigma_x2,sigma_x3,sigma_x4
  • 如果@d 是 d,得到 sigma_x1,sigma_x2,sigma_x3,sigma_x4,...,sigma_xd(所有字符串)

如何更新此程序以获取特定元素?

How to update this procedure to get specific element?

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;

推荐答案

试试这个.希望这能满足您的需求.

just try this. hope this will meet your needs.

创建一个函数GetIndex,它接受字符串和分隔符来分割字符串

create a function GetIndex, which accepts string and delimiter to split the string

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

你可以查询,
假设你需要第四个索引

and you can query like,
suppose you need 4th index then

select * from dbo.GetIndex(@TempCol,',') where itemindex = 4

然后获取第 4 个索引的项目

to get an item of 4th index then

select items from dbo.GetIndex(@TempCol,',') where itemindex = 4

获取项目到变量

select @Aux = items from dbo.GetIndex(@TempCol,',') where itemindex = 4

这篇关于通过索引获取字符串的特定部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 11:19