Ich habe das folgende Problem:
Ich habe eine Tabelle T, die eine Spalte Name mit Namen hat. Die Namen haben folgende Struktur:
A \\ B \ C
Sie können sich selbst so erstellen:
%Vor%Wenn ich das jetzt mache:
%Vor%Das funktioniert nicht, ich muss den \ (Backslash) umgehen:
%Vor%Fein.
Aber wie mache ich das automatisch zu einem String-Namen?
Etwas wie das Folgende wird es nicht tun:
%Vor% Ich bekomme: A\\BC
Irgendwelche Vorschläge?
Vielen Dank im Voraus.
Das Literal A\B\C
muss als A\\A\C
codiert sein, und die Parameter von replace()
müssen ebenfalls entfernt werden:
Ausgabe (siehe dies läuft auf SQLFiddle ):
%Vor%
Es ist also wenig sinnvoll, Ersetzen zu verwenden. Diese beiden Aussagen sind äquivalent:
Die Verwendung von regulärem Ausdruck löst Ihr Problem.
Die folgende Abfrage löst das angegebene Beispiel.
%Vor%falls das angegebene Beispiel mehr als ein Zeichen haben sollte
%Vor%Hinweis: Ich habe 5 als das maximale Vorkommen von char verwendet, wenn man bedenkt, dass die Feldgröße 10 ist, wie es in der Abfrage create table erwähnt wird.
Wir können es immer noch verallgemeinern. Wenn das Ihre Erwartungen noch nicht erfüllt hat, zögern Sie nicht, um meine Hilfe zu bitten.
Sie verwechseln, was in der Datenbank enthalten ist und wie Sie diese Daten in SQL-Anweisungen darstellen. Wenn eine Zeichenfolge in der Datenbank ein Sonderzeichen wie \
enthält, müssen Sie \
eingeben, um dieses Zeichen darzustellen, weil \
ein Sonderzeichen in der SQL-Syntax ist. Dies müssen Sie in INSERT
-Anweisungen tun, aber Sie müssen dies auch in den Parametern der Funktion REPLACE
tun. Es gibt nie wirklich Doppelschlitze in den Daten, sie sind nur ein Teil der Benutzeroberfläche.
Warum müssen Sie die Schrägstriche im SQL-Ausdruck verdoppeln? Wenn Sie Abfragen eingeben, sollten Sie die Schrägstriche in Ihrer Befehlszeile einfach verdoppeln. Wenn Sie die Abfrage in einer Programmiersprache generieren, ist die beste Lösung, vorbereitete Anweisungen zu verwenden. Die API kümmert sich um die korrekte Codierung (vorbereitete Anweisungen verwenden normalerweise eine binäre Schnittstelle, die mit den Rohdaten arbeitet). Wenn Sie aus irgendeinem Grund Abfragen ausführen müssen, indem Sie Zeichenfolgen erstellen, sollte die Sprache hoffentlich eine Funktion zum Ausschließen der Zeichenfolge bereitstellen. Zum Beispiel würden Sie in PHP mysqli_real_escape_string
verwenden.
Aber Sie können es nicht durch SQL selbst tun - wenn Sie versuchen, die nicht-maskierte Zeichenfolge an SQL zu füttern, gehen Daten verloren und es kann es nicht rekonstruieren.
Nicht genau sicher, was du meinst, aber das sollte funktionieren.
%Vor%Es wird im Grunde ersetzen \ wo immer mit \\:)
Hast du das gewollt?