Warum sollte eine UPDATE SET REPLACE () - Anweisung mit Zeilen übereinstimmen, aber keine ändern und keine Warnungen geben?


9

Ich suche eine bestimmte Zeichenfolge in einem Feld und möchte sie durch eine neue Zeichenfolge ersetzen. Insbesondere möchte ich, dass alle Verweise auf eine URL in eine andere URL geändert werden. Ich habe diese SQL-Anweisung erstellt und mysql>führe sie an einer Eingabeaufforderung unter CentOS 5.5 mit MySQL Community Server 5.1.54 aus.

update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');

Die Antwort lautet:

Query OK, 0 rows affected (0.02 sec)
Rows matched: 618  Changed: 0  Warnings: 0

Wie kann ich feststellen, warum keine Änderungen vorgenommen werden?

EDIT 1:

Dank Aaron Bertrand habe ich festgestellt, dass REPLACE()Platzhalter nicht verarbeitet werden können, und ich habe sie völlig falsch verwendet (denken Sie: fehlende WHEREKlausel). Hier ist meine reformierte Aussage:

UPDATE [table]
SET [column] =
REPLACE (
    [column],
    'companydomain.com',
    'companydomain.org' )
WHERE
    [column]
LIKE
    '%companydomain.com%';

Zu dem ich das alte, vertraute erhalte:

Query OK, 0 rows affected (0.02 sec)
Rows matched: 167  Changed: 0  Warnings: 0

Was könnte ich falsch machen?

EDIT 2:

Ich werde dir sagen, was ich falsch gemacht habe !! Ich habe keine Annahmen in Frage gestellt. Meine Annahme war, dass die Zeichenfolge, die ich ersetzte, in Kleinbuchstaben geschrieben war. Die WHERE-Klausel gab alle Dinge zurück, die aussahenLIKE %companydomain.com%. Dies schließt alle Großschreibungspermutationen wie CompanyDomain.com, CoMpAnYdOmAiN.com usw. ein.

Es gab das weiter, an REPLACE()das dann streng nach companydomain.com gesucht wurde, um es dann durch companydomain.org zu ersetzen.

REPLACE (
    [column],
    'companydomain.com',
    'companydomain.org' )

Natürlich wurden meine Unterlagen zurückgegeben, aber nichts wurde ersetzt. Nachdem ich mich geändert hatte REPLACE(), um die Großschreibung zu berücksichtigen, wurden alle Datensätze aktualisiert und es scheint, dass alles in Ordnung ist. Die richtige REPLACE()Syntax für mein Szenario war also:

REPLACE (
    [column],
    'CompanyDomain.com',
    'companydomain.org' )

Antworten:


12

REPLACEspielt auf diese Weise nicht mit Platzhaltern. Ich denke du meintest:

UPDATE [table] 
  SET [column] = REPLACE([column],'TLD.com','TLD.org')
  WHERE [column] LIKE '%TLD.com%';

Sie haben keine WHEREKlausel, daher wurde versucht , 618 Zeilen zu aktualisieren, es wurden jedoch keine Instanzen %TLD.com%in dieser Spalte gefunden. Führen Sie SELECTstattdessen Folgendes aus, um zu sehen, welche Zeilen betroffen sein sollen :

SELECT [column], REPLACE([column], 'TLD.com', 'TLD.org') AS new_value
  FROM [table]
  WHERE [column] LIKE '%TLD.com%';

0

Zuerst müssen wir mit einer selectAbfrage überprüfen :

SELECT * FROM colleges
WHERE course_name LIKE '%&amp%'

Als nächstes müssen wir aktualisieren:

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')
WHERE id = 1

Ergebnisse: Cloud &amp Enterprise ComputingCloud & Enterprise Computing

Schließlich müssen wir uns für alle bewerben:

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')

Ergebnisse: Corporate &amp Insolvency LawCorporate & Insolvency Law

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.