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

[id, url]


URL如下:

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


我想将所有URL更新到另一个域。

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


保持文件名不变。

我必须运行什么查询?

评论

MySQL字符串替换的可能重复

#1 楼

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


评论


从来没有想过这是可能的!谢谢!

–印格斯
20-10-7在6:08

#2 楼

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

评论


您好,我为什么需要在哪里?

–盖伊·科恩(Guy Cohen)
2014年10月7日14:21

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

–德米特罗·舍甫琴科(Dmytro Shevchenko)
15年8月14日在14:34

WHERE还确保您仅替换以http:// etc / etc /或string_to_be_replaced开头的字符串的一部分。例如,在给定的答案中,http://domain1.com/images/this/is/a/test会受到影响,但foobar / http://domain1.com/images/不会受到影响。

–凯尔·查利斯(Kyle Challis)
16 Jan 29'在19:03



#3 楼

尝试使用REPLACE函数:

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


请注意,它区分大小写。

评论


@UniversalGrasp在这里看到很多可能的答案:stackoverflow.com/questions/5656056/…

–乔纳森·伯杰隆
16 Mar 9 '16 at 15:05

#4 楼

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

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


表示所有以"...//domain1.com/images/"开头且后有任何内容(即...的%)的记录。

另一个示例:

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


,这意味着在字符串的任何部分中包含"http://domain1.com/images/"

的所有记录...

#5 楼

试试这个...

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


#6 楼

首先,必须检查

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

接下来,必须更新

UPDATE university
SET course_name = REPLACE(course_name,'&amp','&')WHERE ID = 1

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