sql >> Databasteknik >  >> RDS >> Sqlserver

Ta bort upprepade dubblerade tecken

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.



  1. Hur använder man klassen pqxx::stateless_cursor från libpqxx?

  2. Hur man hämtar bilder från en tabell med andra kolumntexter med PHP

  3. mysql AS-klausul

  4. Hur kontrollerar man om en rad finns i en PostgreSQL-lagrad procedur?