什么MySQL查询将在表中的一个特定字段中进行文本搜索和替换?
例如,搜索foo并替换为bar,这样具有值为hello foo的字段的记录就变成了hello bar。
foo
bar
hello foo
hello bar
取代字符串函数可以做到这一点。
UPDATE table_name SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
改变table_name和field来匹配你的表名和字段:
table_name
field
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
如果你想搜索和替换基于另一个字段的值,你可以做一个CONCAT:
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
只是把这个放在这里,这样其他人就会马上发现它。
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
比如,如果我想把所有出现的约翰替换为马克,我会用下面的方法,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
根据我的经验,最快的方法是
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
INSTR()方法是第二快的,完全省略WHERE子句是最慢的,即使列没有索引。
INSTR()
WHERE