Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuwanie powtarzających się zduplikowanych znaków

Działa to dla ciągów, które są wyłącznie przecinkami lub mają do 398 ciągłych przecinków.

 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    

Dodaj dodatkowe moce 2 na górze, jeśli potrzebujesz więcej, lub usuń z góry, jeśli potrzebujesz mniej. Komentarze na każdym etapie wskazują najmniejszą liczbę, z którą ten etap nie poradzi sobie pomyślnie.

Wszystkie wiersze komentarzy są w tym formacie

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

Aby rozszerzyć serię w górę o kolejny REPLICATE(',',32),',') scena

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

Tak więc zajęłoby się to sekcjami przecinków o długości do 11 806 znaków.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekazywanie listy do procedury składowanej TSQL 2008

  2. Tworzenie indeksu ciągów z kodem jako pierwszy

  3. Emisja wielu powiadomień SQL w aplikacji webowej ASP.Net podczas odświeżania strony

  4. Wielokolumnowy Pivot SQL Server

  5. Pula połączeń jest wolniejsza niż utrzymywanie jednego połączenia otwartego