283

什么 MySQL 查询将在表中的一个特定字段中进行文本搜索和替换?

即搜索foo并替换为bar这样一个记录,其中一个字段的值hello foo变为hello bar

4

7 回答 7

533

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

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
  • 替换(字符串函数)
  • INSTR(字符串函数)
于 2008-09-24T03:23:46.867 回答
94
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
于 2008-09-24T03:22:45.650 回答
10
 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');
于 2014-07-08T10:53:37.730 回答
9

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

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

INSTR()方法是第二快的,完全省略子句WHERE是最慢的,即使该列没有被索引。

于 2018-04-05T14:07:21.297 回答
7

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

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

只是把这个放在这里,以便其他人立即找到它。

于 2012-05-05T09:18:39.210 回答
1

替换字符串函数将执行此操作。

于 2008-09-24T03:22:16.947 回答
0

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

于 2014-08-22T23:33:30.993 回答