Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Entfernen wiederholter doppelter Zeichen

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.