519 Stimmen

Ersetzen eines Zeilenumbruchs in TSQL

Ich möchte ein Zeilenumbruchszeichen in einem TSQL-String ersetzen (oder entfernen). Irgendwelche Ideen?

Das Offensichtliche

REPLACE(@string, CHAR(13), '')

wird es einfach nicht tun...

8voto

Rm558 Punkte 3759

In SQL Server 2017 und höher verwenden Sie Trimmen

Select Trim(char(10) + char(13) from @str)
  1. er schneidet am Anfang und am Ende, nicht in der Mitte
  2. die Reihenfolge der \r et \n spielt keine Rolle

Ich verwende es, um Sonderzeichen für einen Dateinamen zu kürzen

Select Trim(char(10) + char(13) + ' *<>' from @fileName)

6voto

akd Punkte 6152

Wenn der Datentyp Ihrer Spalte ' Text ', erhalten Sie eine Fehlermeldung wie

Msg 8116, Level 16, State 1, Zeile 2 Argument Datentyp Text ist ungültig für Argument 1 der replace-Funktion.

In diesem Fall müssen Sie den Text als nvarchar umwandeln und dann ersetzen

SELECT REPLACE(REPLACE(cast(@str as nvarchar(max)), CHAR(13), ''), CHAR(10), '')

0 Stimmen

Ok, das sieht toll aus. Was aber, wenn das, was ich zu ersetzen versuche, "!crlf" ist, und ja, das ist ein Leerzeichen nach dem !crlf. Die Sorge ist, dass dies in der Mitte der Zeichenfolge auftritt, könnte ich weg mit: SELECT REPLACE(REPLACE(cast(@str as nvarchar(MAX)), CHAR(33), CHAR(13), CHAR(10), CHAR(32), '') oder habe ich das falsch geschrieben? Die Zeichenfolge sieht wie folgt aus: ermöglicht entfernten Angreifern die Umgehung eines Sandbox-Schutzmechanismus und die Erlangung von Privilegien über eine manipulierte Website, auf die mit Internet Explorer zugegriffen wird, wobei der Schwerpunkt auf dem Wort "t! hat" liegt.

6voto

Robin Punkte 31

Manchmal

REPLACE(myString, CHAR(13) + CHAR(10), ' ')

wird nicht funktionieren. Verwenden Sie in diesem Fall den folgenden Codeschnipsel:

REPLACE(REPLACE(myString, CHAR(13),''), CHAR(10), ' ')

6voto

andrew pate Punkte 3251

Ich wollte den Inhalt einer Spalte zu bereinigen, um eine CSV-Datei zu generieren, so wollen loszuwerden, das Komma (,) innerhalb der varchar sowie Newline und Carrage-Return.

Ich wollte auch schließlich die generierte Csv verwenden, um ein anderes Skript zu erstellen (um Zeilen in eine andere DB einfügen), so auch benötigt, um ' innerhalb der varchar zu '' zu ändern, so endete mit diesem...

REPLACE(REPLACE(REPLACE(REPLACE(ErrorMessage, CHAR(13), ''), CHAR(10), ''),',',''),'''','''''')

Es mag andere, schönere Wege geben, aber es hat seine Aufgabe erfüllt.

3voto

DaveX Punkte 745

Wenn Sie ein Problem haben, bei dem Sie nur die folgenden Punkte entfernen möchten nachlaufend Zeichen, können Sie dies versuchen:

WHILE EXISTS
(SELECT * FROM @ReportSet WHERE
    ASCII(right(addr_3,1)) = 10
    OR ASCII(right(addr_3,1)) = 13
    OR ASCII(right(addr_3,1)) = 32)
BEGIN
    UPDATE @ReportSet
    SET addr_3 = LEFT(addr_3,LEN(addr_3)-1)
    WHERE 
    ASCII(right(addr_3,1)) = 10
    OR ASCII(right(addr_3,1)) = 13
    OR ASCII(right(addr_3,1)) = 32
END

Damit wurde ein Problem gelöst, das ich mit Adressen hatte, bei denen eine Prozedur ein Feld mit einer festen Anzahl von Zeilen erzeugte, auch wenn diese Zeilen leer waren. Um Platz in meinem SSRS-Bericht zu sparen, habe ich sie gekürzt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X