Ich muss sicherstellen, dass ein bestimmtes Feld nicht mehr als ein Leerzeichen (ich mache mir keine Gedanken über alle Leerzeichen, nur Leerzeichen) zwischen Zeichen hat.
So
'single spaces only'
muss in verwandelt werden
'single spaces only'
Das Folgende wird nicht funktionieren
select replace('single spaces only',' ',' ')
wie es dazu führen würde
'single spaces only'
Ich würde wirklich lieber bei nativem T-SQL bleiben als bei einer CLR-basierten Lösung.
Gedanken?
sql-server
tsql
Christoph
quelle
quelle
Antworten:
Noch aufgeräumter:
Ausgabe:
quelle
Das würde funktionieren:
quelle
"release < now"
dann werden Sie erhalten"release<><><<><>now"
,"release<<>now"
,"release< now"
, es ist das gleiche mit jedem Paar von Symbolen, wenn Sie eine einzelne von dem Paar haben , dann es geht zu bewegenWenn Sie wissen, dass nicht mehr als eine bestimmte Anzahl von Leerzeichen in einer Reihe vorhanden ist, können Sie das Ersetzen einfach verschachteln:
4 Ersetzungen sollten bis zu 16 aufeinanderfolgende Leerzeichen korrigieren (16, dann 8, dann 4, dann 2, dann 1).
Wenn es wesentlich länger dauern könnte, müssten Sie so etwas wie eine Inline-Funktion ausführen:
Dann mach es einfach
quelle
Ersetzen funktioniert auf allen doppelten Leerzeichen, ohne dass mehrere Ersetzungen erforderlich sind. Dies ist die satzbasierte Lösung.
quelle
Dies kann rekursiv über die Funktion erfolgen:
dann zum Beispiel:
kehrt zurück:
Oder die Lösung, die auf der von @ agdk26 oder @Neil Knight (aber sicherer) beschriebenen Methode basiert.
Beide Beispiele geben die Ausgabe oben zurück:
oder
Wie es funktioniert:
Achtung:
Zeichen / Zeichenfolgen, die zum Ersetzen von Leerzeichen verwendet werden, sollten am Anfang oder Ende der Zeichenfolge nicht vorhanden sein und eigenständig sein.
quelle
Dies ist etwas brutale Gewalt, wird aber funktionieren
quelle
Hier ist eine einfache Funktion, die ich zum Bereinigen von Leerzeichen vor oder nach und mehrerer Leerzeichen innerhalb einer Zeichenfolge erstellt habe. Es verarbeitet bis zu 108 Leerzeichen in einer einzigen Strecke und so viele Blöcke, wie in der Zeichenfolge vorhanden sind. Sie können dies um den Faktor 8 erhöhen, indem Sie bei Bedarf zusätzliche Zeilen mit größeren Leerzeichen hinzufügen. Es scheint schnell zu funktionieren und hat trotz seiner allgemeinen Verwendung in einer großen Anwendung keine Probleme verursacht.
quelle
Fand dies beim Graben nach einer Antwort:
Die vollständige Antwort (mit Erklärung) wurde abgerufen von: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
Auf den zweiten Blick scheint es sich nur um eine etwas andere Version der ausgewählten Antwort zu handeln.
quelle
Methode 1
Die erste Methode besteht darin, zusätzliche Leerzeichen zwischen Wörtern durch eine ungewöhnliche Symbolkombination als temporären Marker zu ersetzen. Anschließend können Sie die temporären Markierungssymbole mithilfe der Ersetzungsfunktion anstelle einer Schleife ersetzen.
Hier ist ein Codebeispiel, das Text innerhalb einer String-Variablen ersetzt.
Ausführungszeittest Nr. 1: In zehn Durchläufen dieser Ersetzungsmethode betrug die durchschnittliche Wartezeit bei Serverantworten 1,7 Millisekunden und die Gesamtausführungszeit 4,6 Millisekunden. Ausführungszeittest Nr. 2: Die durchschnittliche Wartezeit bei Serverantworten betrug 1,7 Millisekunden und die Gesamtausführungszeit 3,7 Millisekunden.
Methode 2
Die zweite Methode ist nicht ganz so elegant wie die erste, erledigt aber auch die Arbeit. Diese Methode verschachtelt vier (oder optional mehrere) Ersetzungsanweisungen, die zwei Leerzeichen durch ein Leerzeichen ersetzen.
Ausführungszeittest Nr. 1: In zehn Durchläufen dieser Ersetzungsmethode betrug die durchschnittliche Wartezeit bei Serverantworten 1,9 Millisekunden und die Gesamtausführungszeit 3,8 Millisekunden. Ausführungszeittest Nr. 2: Die durchschnittliche Wartezeit bei Serverantworten betrug 1,8 Millisekunden und die Gesamtausführungszeit 4,8 Millisekunden.
Methode 3
Die dritte Methode zum Ersetzen zusätzlicher Leerzeichen zwischen Wörtern besteht in der Verwendung einer einfachen Schleife. Sie können zusätzliche Leerzeichen in einer while-Schleife überprüfen und dann die Ersetzungsfunktion verwenden, um die zusätzlichen Leerzeichen bei jeder Iteration der Schleife zu reduzieren.
Ausführungszeittest Nr. 1: In zehn Durchläufen dieser Ersetzungsmethode betrug die durchschnittliche Wartezeit bei Serverantworten 1,8 Millisekunden und die Gesamtausführungszeit 3,4 Millisekunden. Ausführungszeittest Nr. 2: Die durchschnittliche Wartezeit bei Serverantworten betrug 1,9 Millisekunden und die Gesamtausführungszeit betrug 2,8 Millisekunden.
quelle
Dies ist die Lösung über mehrere Ersetzungen, die für alle Zeichenfolgen funktioniert (benötigt keine Sonderzeichen, die nicht Teil der Zeichenfolge sind).
quelle
Ich verwende die FOR XML PATH-Lösung, um mehrere Leerzeichen in ein einzelnes Leerzeichen zu ersetzen
Die Idee ist, Leerzeichen durch XML-Tags zu ersetzen. Anschließend die XML-Zeichenfolge in Zeichenfolgenfragmente ohne XML-Tags aufteilen. Schließlich werden diese Zeichenfolgenwerte durch Hinzufügen einzelner Leerzeichen zwischen zwei verkettet
So kann die endgültige UDF-Funktion aufgerufen werden
quelle
quelle
Ich benutze normalerweise diesen Ansatz:
quelle
Einfach eine andere Methode hinzufügen-
Ersetzen mehrerer Leerzeichen durch ein einzelnes Leerzeichen OHNE REPLACE in SQL Server-
quelle
Bitte finden Sie unten Code
Das hat bei mir funktioniert .. Hoffe das hilft ...
quelle
Sie können dies versuchen:
quelle
Versuche dies..
quelle