Tại sao một câu lệnh UPDATE SET REPLACE () khớp với các hàng, nhưng không thay đổi và không đưa ra cảnh báo nào?


9

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' )

Câu trả lời:


12

REPLACEKhông chơi với các ký tự đại diện theo cách đó. Tôi nghĩ bạn có nghĩa là:

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

Bạn không có WHEREmệnh đề, vì vậy nó đã cố cập nhật 618 hàng, nhưng nó không tìm thấy bất kỳ trường hợp nào %TLD.com%trong cột đó. Để xem những hàng nào sẽ bị ảnh hưởng, hãy chạy SELECTthay thế:

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

0

Đầu tiên, chúng ta phải kiểm tra bằng một selecttruy vấn:

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

Tiếp theo, chúng tôi phải cập nhật:

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

Kết quả: Cloud &amp Enterprise ComputingCloud & Enterprise Computing

Cuối cùng, chúng tôi phải áp dụng cho tất cả:

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

Kết quả: Corporate &amp Insolvency LawCorporate & Insolvency Law

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.