sql >> Database >  >> RDS >> Sqlserver

Herhaalde dubbele tekens verwijderen

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.



  1. sessie/entitymanager is gesloten

  2. Hoe zet ik een SSH-tunnel in Google Cloud Dataflow op naar een externe databaseserver?

  3. Hoe MySQL op CentOS 7 te installeren

  4. Dagelijkse databaseback-up met behulp van Cron Job