【发布时间】:2023-03-15 03:45:01
【问题描述】:
什么 MySQL 查询会在表中的一个特定字段中进行文本搜索和替换?
即搜索foo 并替换为bar,因此字段值为hello foo 的记录变为hello bar。
【问题讨论】:
什么 MySQL 查询会在表中的一个特定字段中进行文本搜索和替换?
即搜索foo 并替换为bar,因此字段值为hello foo 的记录变为hello bar。
【问题讨论】:
【讨论】:
[field_name], "foo", "bar");
WHERE instr(field, 'foo') > 0;会更快(所以它不会执行2次搜索)...我错了吗?
WHERE 子句,你在所有行上都执行UPDATE...
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
【讨论】:
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');
【讨论】:
根据我的经验,最快的方法是
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
INSTR() 方式是第二快的,完全省略 WHERE 子句是最慢的,即使该列没有被索引。
【讨论】:
如果您想根据另一个字段的值进行搜索和替换,您可以执行 CONCAT:
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
只是把这个放在这里,以便其他人立即找到它。
【讨论】:
Replace 字符串函数可以做到这一点。
【讨论】:
update。否则这个解决方案会更好,因为它可以在不更新字段的情况下使用。
我使用上面的命令行如下: update TABLE-NAME set FIELD = replace(FIELD, 'And', 'and'); 目的是用 and 替换 And(“A”应该是小写的)。问题是它在数据库中找不到“And”,但如果我使用“%And%”,那么它可以找到它以及许多其他作为单词一部分的and,甚至是已经小写的and。
【讨论】: