Detta fungerar för strängar som uteslutande är kommatecken eller har upp till 398 sammanhängande kommatecken.
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
Lägg till extra krafter på 2 på toppen om du behöver mer eller ta bort från toppen om du behöver mindre. Kommentarerna vid varje steg indikerar det minsta antal som detta steg inte kommer att hantera framgångsrikt.
Alla kommentarsrader är i detta 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å för att utöka serien uppåt med en annan REPLICATE(',',32),',')
skede
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Så det skulle hantera avsnitt med kommatecken på upp till 11 806 tecken.