Warum sollte ein Update -Set ersetzt () Anweisungszeilen übereinstimmen, aber keine ändern und keine Warnungen geben?

dba.stackexchange https://dba.stackexchange.com/questions/12433

  •  16-10-2019
  •  | 
  •  

Frage

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 leite sie bei a mysql> Eingabeaufforderung auf CentOS 5.5 mit MySQL Community Server 5.1.54.

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 aufspüren, warum keine Änderungen vorgenommen werden?

Bearbeiten 1:

Dank Aaron Bertrand habe ich das entdeckt REPLACE() Ich kann mit Wildcards nicht umgehen und ich habe es völlig falsch verwendet (denken Sie: Fehlen WHERE Klausel). Hier ist meine reformierte Erklärung:

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

Worauf ich den alten, Vertrauten erhalte:

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

Was könnte ich falsch machen?

Bearbeiten 2:

Ich werde dir sagen, was ich falsch gemacht habe !! Ich habe keine Annahmen in Frage gestellt. Mein Annahme war, dass die Schnur, die ich ersetzte, in allen niedrigeren Falls. Die wo Klausel erwiderte alle Dinge, die aussahen LIKE %companydomain.com%. Dies beinhaltet alle Kapitalisierungspermutationen wie CompanyDomain.com, CompanyDomain.com usw. etc.

Es ging an das weiter REPLACE() Dies war dann ausschließlich für CompanyDomain.com, 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. Sobald ich mich verändert habe REPLACE() Um die Kapitalisierung zu berücksichtigen, wurden alle Aufzeichnungen aktualisiert und es scheint, dass alles in Ordnung ist. Das richtige REPLACE() Syntax für mein Szenario war also:

REPLACE (
    [column],
    'CompanyDomain.com',
    'companydomain.org' )
War es hilfreich?

Lösung

REPLACE spielt nicht so mit Wildcards. Ich denke du meinst:

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

Du hast kein WHERE Klausel, so es versucht um 618 Zeilen zu aktualisieren, aber es fand keine Fälle von %TLD.com% in dieser Spalte. Um zu sehen, welche Zeilen betroffen sein sollten, laufen Sie a SELECT stattdessen:

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

Andere Tipps

Zuerst müssen wir mit einem überprüfen select Anfrage:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top