Dies funktioniert für Zeichenfolgen, die ausschließlich Kommas sind oder bis zu 398 zusammenhängende Kommas haben.
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
Fügen Sie oben zusätzliche Zweierpotenzen hinzu, wenn Sie mehr benötigen, oder entfernen Sie sie oben, wenn Sie weniger benötigen. Die Kommentare zu jeder Stufe geben die kleinste Zahl an, mit der diese Stufe nicht erfolgreich fertig wird.
Alle Kommentarzeilen haben dieses Format
/* 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
Also um die Reihe mit einem weiteren REPLICATE(',',32),',')
nach oben zu erweitern Stufe
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Das würde also mit Kommaabschnitten bis zu 11.806 Zeichen umgehen.