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

jul*_*ulz 244 mysql sql search replace

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

即搜索foo并替换为具有bar值的字段的记录hello foo变为hello bar.

Joe*_*ora 469

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

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
Run Code Online (Sandbox Code Playgroud)

  • UPDATE [table_name] SET [field_name] = REPLACE(`[field_name]`,"foo","bar"); (75认同)
  • 和Pring一样,如果你要留下这样的评论,你可能想解释一下原因.这是原始建议中的错误,还是你的错误?并且你知道在对数据库进行任何彻底的更改之前,你应该先备份它吗? (7认同)
  • 我认为不使用`WHERE instr(field,'foo')> 0;`(因此它不会执行2次搜索)更快...我错了吗? (5认同)
  • @treddell,SQL字符串中没有位置从1开始. (2认同)
  • @inemanja,没有`WHERE`子句的@Air你对所有行执行`UPDATE` ... (2认同)

the*_*int 82

UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
Run Code Online (Sandbox Code Playgroud)

  • 帮助过我.对于所有新手,请取下方括号. (2认同)

Ume*_*til 8

 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Run Code Online (Sandbox Code Playgroud)

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

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Run Code Online (Sandbox Code Playgroud)


小智 8

根据我的经验,最快的方法是

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
Run Code Online (Sandbox Code Playgroud)

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