2016-07-14 12 views
1

Ich weiß, wie dies im Code mit Schleifen und if-Anweisungen zu tun, aber ich bin nicht sicher, wie dies in Tsql zu tun.Ersetzen eines Zeichens durch ein anderes, wenn nicht neben einem bestimmten anderen Zeichen

Hinweis, wenn ich sage, CR und LF ich meine char (13) und char (10)

im Grunde will ich alles mit einem CR finden und mit einem CRLF zu ersetzen. Es ist etwas komplizierter als das, denn wenn ich jemals eine CRLF getroffen habe, möchte ich nicht, dass das Ergebnis CRCRLF ist. Ich möchte alle Instanzen in einer Spalte ersetzen, nicht nur das erste Auftreten. Jede Idee auf dem tsql Weg dies zu tun wäre großartig.

Ein schrecklicher Hack wäre, gehen durch die und ersetzen Sie jede CR mit CRLF in einigen CRCRLF und führen Sie dann eine zweite Aktualisierung, um alle CRCRLF mit CRLF zu ersetzen, aber das kann nicht der beste Weg sein könnte es?

+0

das Ganze wäre nur schön sein, dass im syntaktisch richtig zu machen, aber ich kann wahrscheinlich machen mein eigenes Update. Ich folge deinem vorgeschlagenen Beitrag aber nicht –

+0

Was ist so schlimm an zwei Pässen? – Paparazzi

+1

Sie haben cr und lf getauscht. lf ist chr (10) und cr ist chr (13) – hetOrakel

Antwort

1

Nun, wäre eine Methode sein, um die aktuellen Fälle von CRLF mit CR zu ersetzen, und tut dann den Ersatz:

with chars as (
     select char(10) as lf, char(13) as cr 
    ) 
update t 
    set col = replace(replace(col, cr + lf, cr), cr, cr + lf) 
    from t cross join 
     chars; 
+0

Dies würde eine einzige lf unmodified Ich würde ersetzen (ersetzen (ersetzen (col, crlf, lf), cr, lf), lf, crlf) – hetOrakel

+1

@hetOrakel. . . Das ist ein vernünftiger Vorschlag. Die Frage lautet jedoch explizit: "Grundsätzlich möchte ich alles mit einem CR finden und durch einen CRLF ersetzen". –

+0

. . Du hast recht, aber ... 1) er hat cr und lf getauscht (siehe mein Kommentar dort) und 2) er erwartet einen einzelnen CR. Ich kenne kein aktuelles Betriebssystem, das eine einzelne CR verwendet. Heute ist es CRLF (x0Dx0A/13 + 10) oder LF (x0A/10). Sogar Apple (OSX) verwendet heutzutage LF (x0A/10). Also ich bezweifle, was er fragt, was er wirklich will;). Aber es gibt nur eine Person, die das beantworten kann;) – hetOrakel