Entfernen mehrfacher duplizierter Zeichen

8

Ich habe eine Zeichenfolge in meinem gespeicherten Prozess wie ',,,sam,,bob,' oder ',,,' Von der obigen Zeichenfolge muss ich mehrere Kommas löschen, so muss es aussehen 'sam,bob,' oder nur wenn ',,,' dann '' . Ich muss nur SQL Server-Funktionen verwenden. Ich benutze Sql Server 2008 und .Net 3.5

Vielen Dank im Voraus.

    
Nash 26.04.2011, 17:33
quelle

5 Antworten

7

Dies funktioniert für Strings, die ausschließlich Kommas sind oder bis zu 398 zusammenhängende Kommas haben.

%Vor%

Fügen Sie zusätzliche 2er-Potenzen oben hinzu, wenn Sie mehr benötigen oder entfernen Sie sie von oben, wenn Sie weniger benötigen. Die Kommentare jeder Stufe geben die kleinste Zahl an, mit der diese Stufe nicht erfolgreich umgehen wird.

Alle Kommentarzeilen haben dieses Format

%Vor%

Also, um die Reihe mit einem weiteren REPLICATE(',',32),',') stage

nach oben zu erweitern %Vor%

Das würde also Abschnitte von Kommata mit bis zu 11.806 Zeichen umfassen.

    
Martin Smith 26.04.2011, 17:59
quelle
5

Ich würde eine UDF vorschlagen, dies zu tun. Da die UDF, die ich vorschlage, keine Tabellen berührt, sollte die Leistung ziemlich gut sein.

%Vor%

Sie können die Funktion wie folgt testen:

%Vor%     
G Mastros 26.04.2011 17:53
quelle
2

probiere das

aus %Vor%     
cookiemonsta 24.05.2012 06:11
quelle
1
  

George Mastros schrieb:

     

Ich würde eine UDF vorschlagen, dies zu tun. Seit der UDF möchte ich vorschlagen   keine Tabellen berührt, sollte die Leistung ziemlich gut sein.

Ich stimme zu, dass "nur Speicher" Scalar UDF ziemlich schnell sind. Tatsächlich habe ich tatsächlich eine von Georges Skalar-UDFs verwendet, die das "Initial Caps" -Problem löste, um zu zeigen, dass manchmal "Set Based" -Code NICHT immer der beste Weg ist.

>

Aber Martin Smith (ein weiteres Poster zu diesem Thema) war definitiv auf dem richtigen Weg. In diesem Fall ist "Set Based" immer noch der richtige Weg. Natürlich kann jeder eine unbegründete Behauptung bezüglich der Leistung abgeben, also lasst uns das mit einer Performance-Demonstration aufheizen.

Um zu demonstrieren, benötigen wir zunächst einige Testdaten. Eine Menge Testdaten, weil beide Funktionen, die wir testen werden, schnell laufen. Hier ist der Code zum Erstellen einer Million Zeilen Testtabelle.

%Vor%

Keine Notwendigkeit, Georges feine Funktion hier erneut zu veröffentlichen, aber ich muss meins posten. Die folgende Funktion erzeugt das gleiche Ergebnis wie Georges. Es sieht aus wie ein "iTVF" (Inline Table Valued Function) und es ist, aber es gibt nur einen Wert zurück. Deshalb nennt Microsoft sie "Inline Scalar Functions" (ich nenne sie kurz "iSFs").

%Vor%

Zuerst testen wir George's Scalar UDF. Bitte lesen Sie die Kommentare darüber, warum wir SET STATISTICS TIME ON hier nicht verwenden.

%Vor%

Hier sind die Renditen von diesem "fiver" Lauf ...

%Vor%

Nun werden wir die "iSF" -Version ausführen ...

%Vor%

Hier sind die Ergebnisse von diesem Lauf.

%Vor%

Mein Punkt ist nicht, dass Georges Code schlecht ist. Ganz und gar nicht. In der Tat verwende ich Scalar UDFs, wenn es keine "Single-Query" -Lösung gibt. Ich werde George auch sagen und unterstützen, indem ich sage, dass nicht alle "Single-Query" -Lösungen immer die besten sind.

Hören Sie nicht auf, nach ihnen zu suchen, wenn es um UDFs geht. ; -)

    
Jeff Moden 07.07.2012 03:59
quelle
0

Ihre Lösungen sind gut, aber

  1. es ist nur Komma
  2. Ich hasse Schleife-basierten TSQL-Code; -)

Also schrieb ich basierend auf Marcin Lösungssatz-basierten universellen Code für den Ersatz jeder deklarierten Art von Duplikaten:

%Vor%

Sie können jede Art von Zeichen in der Duplicate-Zeichenfolge und jeder Ersetzungszeichenfolge in @Replacement deklarieren. Zusätzliche Verstärkung IMHO ist, dass ich nur im Bereich der maximalen Länge der Eingabezeichenfolge nach Ersatz suchen

    
Dalex 27.04.2011 11:30
quelle

Tags und Links