sql >> Databáze >  >> RDS >> Sqlserver

Odstranění opakovaných duplicitních znaků

Toto funguje pro řetězce, které jsou výhradně čárkami nebo mají až 398 souvislých čárek.

 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    

Pokud potřebujete více, přidejte další síly 2 nahoře nebo odstraňte z horní části, pokud potřebujete méně. Komentáře u každé fáze označují nejmenší počet, se kterým se tato fáze úspěšně nevypořádá.

Všechny řádky komentářů jsou v tomto formátu

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

Chcete-li tedy rozšířit řadu nahoru o další REPLICATE(',',32),',') etapa

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

To by se tedy zabývalo částmi čárek o délce až 11 806 znaků.



  1. Oracle - v tomto oboru neexistuje žádná funkce s názvem X

  2. Předání databázového připojení odkazem v PHP

  3. Oracle kopíruje řádky do stejné tabulky s různými daty

  4. Počítání po sobě jdoucích číselných hodnot v SQL