2016-01-13 11 views
5

Ich habe Daten, die führende und nachfolgende Leerzeichen in der Zeichenfolge hat. Beim Speichern dieser Daten in der Datenbank möchte ich den Platz in der Abfrage selbst vor dem Speichern in der DB trimmen.Wie führende und nachstehende Tabulatorräume in MSSQL-Abfrage trimmen

Normale Leerzeichen werden mit der RTRIM- und LTRIM-Funktion richtig abgeschnitten, aber wenn eine Zeichenfolge Tabulatorbereich enthält, wird der Tabulatorbereich nicht von der Eingabezeichenfolge abgeschnitten.

Kann mir jemand helfen, die Zeichenfolge mit getrimmt mit Tabulatorraum von führenden und nachlaufenden zu bekommen.

+1

alle Registerkarten durch Leerzeichen ersetzen, die Zwischenzeichenfolge beschneiden und dann Leerzeichen zurück in Registerkarten konvertieren? –

Antwort

6

Ersetzen Sie den ASCII-Code für Reiter (9):

replace(@str, char(9), '') 

Um nur die äußeren Laschen zu entfernen, sie zuerst etwas ändern, (ich will nicht eine Reihe von vier Räumen verwenden in Ihren Daten existieren in Dieses Beispiel), dann rtrim/ltrim, wandeln dann die gleiche Abfolge zurück zu Registerkarten:

replace(ltrim(rtrim(replace(@str, char(9), ' '))),' ', char(9)); 
+1

das wird auch alle Tab-Leerzeichen zwischen den Strings ersetzen, ich will nur das führende und das nachfolgende Leerzeichen. – user3876801

+0

@ user3876801 Ich habe die Antwort aktualisiert, um dieses Szenario einzuschließen. – morgb

+0

Was ist mit der Leistung, wenn Daten sehr groß sind, da die Funktion zum Ersetzen mehrerer Zeitdaten zum Konvertieren der Daten verwendet wird. – user3876801

0

diese Versuchen:

DECLARE @InputString nvarchar(50) = CHAR(9) + CHAR(9) + ' 123'+ 'abc ' + CHAR(9); 
SELECT @InputString AS InputString 
     ,REVERSE(RIGHT(REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1)), LEN(REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1))) - PATINDEX('%[^'+CHAR(9)+']%', REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1))) + 1)) AS OutputString 
; 

Vielleicht sollten Sie es als eine Funktion umgestalten. Beachten Sie, dass es nur über Sql Server 2008 funktioniert. Sie können CHAR (9) zu jedem Zeichen, das Sie zuschneiden möchten, ersetzen.

Verwandte Themen