sql >> Database teknologi >  >> RDS >> Sqlserver

Fjernelse af gentagne duplikerede tegn

Dette fungerer for strenge, der udelukkende er kommaer eller har op til 398 sammenhængende kommaer.

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

Tilføj ekstra kræfter på 2 øverst, hvis du har brug for mere, eller fjern fra toppen, hvis du har brug for mindre. Kommentarerne ved hvert trin angiver det mindste antal, som denne fase ikke vil håndtere med succes.

Alle kommentarlinjerne er i dette 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å for at udvide serien opad med en anden REPLICATE(',',32),',') scenen

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

Så det ville håndtere sektioner af kommaer på op til 11.806 tegn.



  1. Sådan fungerer Time()-funktionen i SQLite

  2. Sådan rettes Meddelelse:SQLSTATE[08004] [1040] For mange forbindelser

  3. Indekseringskolonne med REPLACE-funktion i mySQL

  4. Generer et sæt eller en sekvens uden loops – del 3