Dette fungerer for strenge, der udelukkende er kommaer eller har op til 398 sammenhængende kommaer.
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
Tilføj ekstra kræfter på 2 øverst, hvis du har brug for mere, eller fjern fra toppen, hvis du har brug for mindre. Kommentarerne ved hvert trin angiver det mindste antal, som denne fase ikke vil håndtere med succes.
Alle kommentarlinjerne er i dette 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
Så for at udvide serien opad med en anden REPLICATE(',',32),',')
scenen
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Så det ville håndtere sektioner af kommaer på op til 11.806 tegn.