Tôi đang tìm kiếm một chuỗi nhất định trong một trường và muốn thay thế nó bằng một chuỗi mới. Cụ thể, tôi muốn tất cả các tham chiếu đến một URL được thay đổi thành một URL khác. Tôi đã tạo câu lệnh SQL này và đang chạy nó tại một mysql>
dấu nhắc trên CentOS 5.5 bằng MySQL Community Server 5.1.54.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
Câu trả lời là:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Làm thế nào tôi có thể theo dõi tại sao không có thay đổi đang được thực hiện?
CHỈNH SỬA 1:
Nhờ Aaron Bertrand, tôi phát hiện ra rằng REPLACE()
không thể xử lý các ký tự đại diện và tôi đã sử dụng nó hoàn toàn sai (nghĩ: WHERE
điều khoản còn thiếu ). Đây là tuyên bố cải cách của tôi:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
Để tôi nhận được cái cũ, quen thuộc:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
Tôi có thể làm gì sai?
EDIT 2:
Tôi sẽ nói cho bạn biết tôi đã làm gì sai !! Tôi đã không đặt câu hỏi về các giả định. Giả định của tôilà chuỗi mà tôi đang thay thế là trong tất cả các trường hợp thấp hơn. Mệnh đề WHERE đã trả về tất cả những thứ đã xemLIKE %companydomain.com%
. Điều đó bao gồm tất cả các hoán vị viết hoa như CompanyDomain.com, CoMpAnYdOmAiN.com, v.v.
Nó đã thông qua rằng REPLACE()
sau đó đã tìm kiếm nghiêm ngặt cho companydomain.com để sau đó thay thế nó bằng companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Vì vậy, tất nhiên hồ sơ của tôi đã được trả lại, nhưng không có gì được thay thế. Khi tôi thay đổi REPLACE()
để đưa vốn vào tài khoản, tất cả các hồ sơ đã được cập nhật và có vẻ như tất cả đều ổn. REPLACE()
Cú pháp đúng cho kịch bản của tôi là như vậy:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )