sql >> Base de Datos >  >> RDS >> Sqlserver

Eliminación de caracteres duplicados repetidos

Esto funciona para cadenas que son exclusivamente comas o tienen hasta 398 comas contiguas.

 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    

Agregue poderes adicionales de 2 en la parte superior si necesita más o elimine de la parte superior si necesita menos. Los comentarios de cada etapa indican el número más pequeño que esta etapa no tratará con éxito.

Todas las líneas de comentarios están en este formato

/*  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

Entonces, para extender la serie hacia arriba con otro REPLICATE(',',32),',') escenario

D = 32 
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807

Entonces eso se ocuparía de secciones de comas de hasta 11.806 caracteres.