MySQL搜索并替换字段中的某些文本


257

将在表的一个特定字段中进行文本搜索并替换哪些MySQL查询?

即搜索foo并替换为,bar因此带有值的字段的记录hello foo变为hello bar

Answers:


490

更改table_namefield匹配您的表名和相关字段:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
  • 替换(字符串函数)
  • INSTR(字符串函数)

79
更新[table_name] SET [field_name] = REPLACE([field_name],“ foo”,“ bar”);
Meetai.com

6
我认为不使用WHERE instr(field, 'foo') > 0;它会更快(因此它将不会执行2次搜索)...我错了吗?
inemanja

2
@ treddell,SQL字符串中没有位置从1开始。
Alexis Wilke 2015年

2
@ inemanja,@ Air不带WHERE子句的UPDATE所有行都应执行...
Alexis Wilke

7
像Pring一样,如果您要发表这样的评论,则可能需要解释原因。这是原始建议的错误,还是您的错误?而且您确实知道,在对数据库进行全面更改之前,应该先备份该数据库吗?
pdwalker

86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

2
帮助过我。对于所有菜鸟,请卸下方括号。
Anantha Raju C

8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

例如,如果我想用Mark代替所有出现的John,我将在下面使用,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

6

如果您想根据另一个字段的值进行搜索和替换,可以执行CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

只是为了将它放在这里,以便其他人立即找到它。


如果用引号引起来,请确保使用正确的引号
200_success

4

以我的经验,最快的方法是

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

INSTR()方法是第二快的和省略WHERE共条款是最慢的,即使列没有编入索引。


对我有用,因为我需要在其中添加另一个子句。UPDATE SET TABLE_NAME字段= REPLACE(字段, '富', '酒吧')WHERE字段LIKE '%FOO%' AND otherfield = 'foo22'
最大

1

替换字符串函数将这样做。


为我工作。这取决于您如何解释问题。如果您需要更改数据库条目,请使用update。否则,此解决方案会更好,因为可以在不更新字段的情况下使用它。
Gruber 2012年

0

我使用上面的命令行如下:update TABLE-NAME set FIELD = replace(FIELD,'And','and'); 目的是将And替换为and(“ A”应为小写)。问题是它无法在数据库中找到“ And”,但是如果我使用“%And%”之类的字词,那么它可以与单词中的许多其他AND(甚至是小写字母)一起找到它。

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.