У меня есть строка вроде:
@ TempCol = sigma_x1, sigma_x2, ..., sigma_xd, XX, YY, ZZ
Итак, как я могу получить определенную часть этой строки, на основе, скажем, индекса.
так что
- если индекс равен 0, получить sigma_x1
- если индекс равен 1, получить sigma_x2
- если индекс равен 2, получить sigma_x3
- если индекс d-1, получить sigma_xd
- если индекс d, получим XX,
- если индекс d + 1, получить YY
и т. д.
Ранее Андрей М решил похожую проблему, его код получает подстроку, основанную на номбере, но возвращает подстроку следующим образом:
- если @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 (ALL STRING)
Как обновить эту процедуру, чтобы получить определенный элемент?
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;