更新列值,替换字符串的一部分


325

我在MySQL数据库中有一个带有以下各列的表

[id, url]

网址就像:

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

我想将所有网址更新到另一个域

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

保持文件名不变。

我必须运行什么查询?


Answers:



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

相关文档:http : //dev.mysql.com/doc/refman/5.5/zh-CN/string-functions.html#function_replace


13
您好,我为什么需要在哪里?
Guy Cohen 2014年

14
@GuyCohen因为否则查询将修改表中的每一行。该WHERE子句优化查询以仅修改具有特定URL的行。从逻辑上讲,结果将是相同的,但是添加WHERE会使操作更快。
Dmytro Shevchenko

3
WHERE还确保你只替换的字符串的部分开始http://etc/etc/string_to_be_replaced.例如,在给定的答案,http://domain1.com/images/this/is/a/test会有影响,但foobar/http://domain1.com/images/不会。
凯尔·查利斯


9

您需要WHERE子句替换符合WHERE子句中条件的记录(而不是所有记录)。您使用符号表示部分字符串:IE

LIKE ('...//domain1.com/images/%');

意味着所有记录BEGIN"...//domain1.com/images/"和有什么AFTER(这是%为...)

另一个例子:

LIKE ('%http://domain1.com/images/%')

这意味着包含 "http://domain1.com/images/"

在字符串的任何部分...


7

尝试这个...

update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');

1

首先,必须检查

SELECT * FROM universityWHERE course_name喜欢'%&amp%'

接下来,必须更新

更新大学SET course_name = REPLACE(course_name,'&amp','&')WHERE ID = 1

结果:工程与技术=> 工程与技术

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.