Това работи за низове, които са само запетаи или имат до 398 последователни запетаи.
SELECT
CASE
WHEN TargetString NOT LIKE '%[^,]%'
THEN '' /*The string is exclusively commas*/
ELSE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TargetString,
REPLICATE(',',16),','), /*399/16 = 24 remainder 15*/
REPLICATE(',',8),','), /* 39/ 8 = 4 remainder 7*/
REPLICATE(',',4),','), /* 11/ 4 = 2 remainder 3*/
REPLICATE(',',2),','), /* 5/ 2 = 2 remainder 1*/
REPLICATE(',',2),',') /* 3/ 2 = 1 remainder 1*/
END
FROM T
Добавете допълнителни правомощия от 2 в горната част, ако имате нужда от повече, или премахнете отгоре, ако имате нужда от по-малко. Коментарите за всеки етап показват най-малкия брой, с който този етап няма да се справи успешно.
Всички редове за коментари са в този формат
/* L/D = Q remainder R */
D: Corresponds to the length of the string generated by `REPLICATE`
R: Is always D-1
Q+R: Form L for the next step
Така че, за да разширите серията нагоре с друг REPLICATE(',',32),',')
етап
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Така че това би се справило със секции от запетаи до 11 806 знака.