SQL: suchen/ersetzen-aber nur das erste mal ein Wert erscheint in Rekord -
Habe ich html-Inhalte in der Spalte post_content.
Will ich suchen und ersetzen von A mit B aber nur beim ersten mal Ein, erscheint in der record als es erscheinen mag, mehr als einmal.
Der folgenden Abfrage würde natürlich ersetzen Sie alle Instanzen von A mit B
UPDATE wp_posts SET post_content = REPLACE (post_content, 'A', 'B');
- welche Datenbank?
- mysql Datenbank @gjreda vielen Dank für die Erklärung.
- Im mit einer mysql-Datenbank. @gjreda Dank, ich habe versucht, die Abfrage, bekomme aber eine Fehlermeldung. #1064 - Sie haben einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax zur Verwendung in der Nähe von " UPDATE wp_posts SET post_content = REPLACE(SUBSTRING_INDEX(post_content, 'A',' at line 1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte das eigentlich das sein, was Sie wollen in MySQL:
Es ist etwas komplizierter als meine früheren Antwort - Sie müssen feststellen, dass die erste Instanz von 'A' (mit der INSTR-Funktion), dann mit LINKS in Kombination mit ERSETZEN, ersetzen Sie nur diese Instanz, als Sie mit SUBSTRING und INSTR zu finden, das gleiche "A", das Sie ersetzen und VERKETTEN es mit der vorherigen string.
Siehe mein test unter:
Produziert:
Alternativ können Sie auch die Funktionen verwenden, die LOCATE(), INSERT() und CHAR_LENGTH() wie diese:
Full-Abfrage:
Wenn Sie eine Oracle-DB, Sie sollten in der Lage sein, etwas zu schreiben wie :
Siehe hier für mehr Informationen : http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm
Hinweis : Sie sollten wirklich aufpassen
post_content
hinsichtlich der Frage der Sicherheit, da es scheint, um eine Benutzer-Eingabe.Machte ich die folgende kleine Funktion und bekam es:
Greg Reda-Lösung funktionierte nicht für mich auf Zeichenfolgen, die länger als 1 Zeichen, weil, wie die REPLACE() geschrieben wurde (nur die ersetzen das erste Zeichen der Zeichenfolge ersetzt werden). Hier ist eine Lösung, die ich glaube, ist umfassender und deckt jeden Anwendungsfall das problem, wenn definiert als Wie Ersetze ich das erste vorkommen von "Ein String" "String B" in "String C"?
Davon ausgegangen, dass Sie sicher sind, dass der Eintrag ENTHÄLT BEREITS DIE ZEICHENFOLGE ERSETZT WERDEN! Wenn Sie versuchen, anstelle 'Hund' mit 'cat' in der Zeichenkette 'pupper', es wird Ihnen ein 'pro', das ist nicht, was Sie wollen. Hier ist eine Abfrage, die Griffe, die, indem Sie zuerst überprüfen, um zu sehen, wenn die Zeichenkette, die ersetzt werden, besteht in der vollständigen Zeichenfolge:
Den konkreten Anwendungsfall hier ist das ersetzen der ersten Instanz von 'bla' in der Spalte 'buycraft' mit einem leeren string ". Ich denke, eine ziemlich intuitive und Natürliche Lösung:
Beispiel walkthrough zu ersetzen "pupper" in "lil_puppers_yay" mit 'Hund':
Alles getan!
Hinweis: SQL ist mit 1-indizierten strings (als SQL-Anfänger, ich wusste das nicht, bevor ich herausgefunden, dass dieses problem aus). Auch die SQL-LINKS und SUBSTRING funktionieren scheint, mit ungültigen Indizes der ideale Weg (anpassen, um entweder den Anfang oder das Ende der Zeichenfolge), die ist super bequem für einen Anfänger SQLer wie mich 😛
Noch ein Hinweis: ich bin ein total Anfänger in SQL und das ist so ziemlich der härteste Abfrage, die ich jemals geschrieben habe, so gibt es möglicherweise einige Ineffizienzen. Es bekommt den job getan, genau wenn.
Ist es einfacher
Jahre sind vergangen, seit diese Frage gestellt wurde, und MySQL 8 eingeführt hat REGEX_REPLACE:
So, vorausgesetzt, Sie können reguläre Ausdrücke verwenden, in deinem Fall:
Leider für diejenigen von uns, die auf MariaDB, seine REGEXP_REPLACE Geschmack fehlt die auftreten parameter. Hier ein regex-fähigen version von Andriy M's Lösung, bequem gespeichert, wie eine wiederverwendbare Funktion, wie vorgeschlagen, durch Luciano Seibel:
Halten der Probe gjreda ein bisschen mehr einfach verwenden: