Esto funciona para cadenas que son exclusivamente comas o tienen hasta 398 comas contiguas.
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
Agregue poderes adicionales de 2 en la parte superior si necesita más o elimine de la parte superior si necesita menos. Los comentarios de cada etapa indican el número más pequeño que esta etapa no tratará con éxito.
Todas las líneas de comentarios están en este formato
/* 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
Entonces, para extender la serie hacia arriba con otro REPLICATE(',',32),',')
escenario
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Entonces eso se ocuparía de secciones de comas de hasta 11.806 caracteres.