Mengapa pernyataan UPDATE SET REPLACE () cocok dengan baris, tetapi tidak mengubah dan tidak memberikan peringatan?


9

Saya mencari string tertentu di bidang dan ingin menggantinya dengan string baru. Secara khusus, saya ingin semua referensi ke satu URL diubah ke URL lain. Saya telah membuat pernyataan SQL ini dan menjalankannya pada mysql>prompt di CentOS 5.5 menggunakan MySQL Community Server 5.1.54.

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

Jawabannya adalah:

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

Bagaimana saya bisa melacak mengapa tidak ada perubahan yang dilakukan?

EDIT 1:

Berkat Aaron Bertrand, saya menemukan bahwa REPLACE()tidak dapat menangani wildcard dan saya menggunakannya sepenuhnya salah (pikirkan: WHEREklausa yang hilang ). Inilah pernyataan saya yang sudah direformasi:

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

Saya menerima yang lama, yang sudah saya kenal:

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

Apa yang bisa saya lakukan salah?

EDIT 2:

Aku akan memberitahumu apa yang aku lakukan salah !! Saya tidak mempertanyakan asumsi. Asumsi sayaadalah bahwa string yang saya ganti dalam semua huruf kecil. Klausa WHERE mengembalikan semua hal yang tampakLIKE %companydomain.com%. Itu termasuk semua permutasi permodalan seperti CompanyDomain.com, CoMpAnYdOmAiN.com, dll.

Itu berlalu REPLACE()yang kemudian hanya mencari companydomain.com untuk kemudian menggantinya dengan companydomain.org.

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

Jadi tentu saja catatan saya dikembalikan, tetapi tidak ada yang diganti. Setelah saya berubah REPLACE()untuk memperhitungkan kapitalisasi, semua catatan diperbarui dan tampaknya semuanya baik-baik saja. REPLACE()Sintaks yang benar untuk skenario saya adalah sebagai berikut:

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

Jawaban:


12

REPLACEtidak bermain dengan wildcard seperti itu. Saya pikir Anda maksud:

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

Anda tidak memiliki WHEREklausa, jadi ia mencoba memperbarui 618 baris, tetapi tidak menemukan contoh apa pun %TLD.com%di kolom itu. Untuk melihat baris mana yang akan terpengaruh, jalankan SELECTsebaliknya:

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

0

Pertama, kita harus memeriksa menggunakan selectkueri:

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

Selanjutnya, kita harus memperbarui:

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

Hasil: Cloud &amp Enterprise ComputingCloud & Enterprise Computing

Akhirnya, kita harus mendaftar untuk semua:

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

Hasil: Corporate &amp Insolvency LawCorporate & Insolvency Law

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.