2012-04-16 35 views
207

Tôi có một bảng với các cột sau trong một cơ sở dữ liệu MySQLCập nhật một giá trị cột, thay thế một phần của chuỗi

[id, url] 

Và các url giống như:

http://domain1.com/images/img1.jpg 

Tôi muốn cập nhật tất cả các url đến một tên miền khác

http://domain2.com/otherfolder/img1.jpg 

giữ nguyên tên tệp.

Tôi phải chạy truy vấn nào?

+0

Bản sao có thể có của [MySQL string replace] (http://stackoverflow.com/questions/5956993/mysql-string-replace) –

Trả lời

443
UPDATE urls 
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/') 
+0

Rất hữu ích, làm việc trên 2000 truy vấn với thất bại, rất nhanh chóng. – Andy

+1

THAY THẾ cũng hoạt động trên CHỌN, khá hữu ích :) – Arda

113
UPDATE yourtable 
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/') 
WHERE url LIKE ('http://domain1.com/images/%'); 

tài liệu liên quan: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

+0

+1 để tham khảo tài liệu ... –

+13

Xin chào, tại sao tôi cần ở đâu? –

+12

@GuyCohen Vì nếu không truy vấn sẽ sửa đổi mọi hàng trong bảng. Mệnh đề 'WHERE' tối ưu hóa truy vấn để chỉ sửa đổi các hàng có URL nhất định. Về mặt logic, kết quả sẽ giống nhau, nhưng việc thêm 'WHERE' sẽ làm cho hoạt động nhanh hơn. –

20

Hãy thử sử dụng REPLACE function:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); 
     -> 'WwWwWw.mysql.com' 

Lưu ý rằng đó là trường hợp nhạy cảm.

+0

+ cho độ nhạy trường hợp chỉ. – kubilay

+0

Làm cách nào để bạn thực hiện CASE - INSENSITIVE? Am stack plz hlp. thx –

+1

@UniversalGrasp Xem nhiều câu trả lời có thể có tại đây: http://stackoverflow.com/questions/5656056/case-insensitive-replace-in-mysql –

8

Bạn cần mệnh đề ĐÂU để thay thế CHỈ các hồ sơ tuân thủ điều kiện trong mệnh đề WHERE (như trái ngược với tất cả hồ sơ). Bạn sử dụng dấu hiệu % để biểu thị một phần chuỗi: I.E.

LIKE ('... // domain1.com/images/%'); có nghĩa là tất cả các hồ sơ mà BEGIN với "... // domain1.com/images/" và có bất cứ điều gì SAU (đó là% cho ...)

Một ví dụ khác:

NHƯ ('% http://domain1.com/images/% ') có nghĩa là tất cả các bản ghi chứa "http://domain1.com/images/" trong bất kỳ phần nào của chuỗi ...

Các vấn đề liên quan