Dit werkt voor strings die uitsluitend komma's zijn of maximaal 398 aaneengesloten komma's hebben.
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
Voeg extra krachten van 2 toe aan de bovenkant als je meer nodig hebt of verwijder van de bovenkant als je minder nodig hebt. De opmerkingen bij elke fase geven het kleinste aantal aan dat deze fase niet succesvol zal afhandelen.
Alle commentaarregels hebben dit formaat
/* 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
Dus om de reeks naar boven uit te breiden met nog een REPLICATE(',',32),',')
podium
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Dus dat zou gaan over secties van komma's tot 11.806 tekens.