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: WHERE
klausa 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' )