Hi,
Here is a new approach for splitting a delimited string. It is set-based, without CHARINDEX, using number table…
See:
DECLARE @s-2 VARCHAR(620)='item_01,item_02,item_03';
;WITH C AS
(SELECT n, ROW_NUMBER() OVER(ORDER BY n) AS rn
FROM Nums --Number Table
WHERE SUBSTRING(@s, n, 1) = ','
AND n <= LEN(@s))
SELECT SUBSTRING(@s, A.n + 1, B.n - 1 - A.n) AS item
FROM C A
INNER JOIN C B
ON A.rn + 1 = B.rn
AND B.n - A.n > 1;
Also here is the simplified version of my technique for removing duplicate side-by-side characters.
DECLARE @result VARCHAR(8000) = '',
@string VARCHAR(8000) = 'SQQQQQQQQQQLLLLLLL Serrrrrrrrveerr';
SELECT @result = @result + Data
FROM (SELECT ID,
Data,
ROW_NUMBER() OVER (PARTITION BY Data ORDER BY ID) - ID
FROM (SELECT SUBSTRING(@String, n, 1), n
FROM Nums
WHERE n <= LEN(@String)
) D(data, ID)
) D(ID, Data, RowNum)
GROUP BY Data, RowNum
ORDER BY MIN(ID)
SELECT @result AS Result