【问题标题】:MySQL search and replace some text in a fieldMySQL搜索并替换字段中的一些文本
【发布时间】:2023-03-15 03:45:01
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql search replace


    【解决方案1】:

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

    UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
    

    【讨论】:

    • UPDATE [table_name] SET [field_name] = REPLACE([field_name], "foo", "bar");
    • 我认为不使用WHERE instr(field, 'foo') > 0;会更快(所以它不会执行2次搜索)...我错了吗?
    • @treddell,SQL 字符串中没有从 1 开始的位置。
    • @inemanja, @Air 没有WHERE 子句,你在所有行上都执行UPDATE...
    • 像 Pring 一样,如果您要发表这样的评论,您可能需要解释原因。是原始建议中的错误,还是您的错误?而且您确实知道,在对数据库进行任何彻底更改之前,您应该先备份它?
    【解决方案2】:
    UPDATE table_name 
    SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
    

    【讨论】:

    • 帮助了我。对于所有的菜鸟,请删除方括号。
    • 请注意:在此答案中,将“字段”替换为您要修改的字段的 名称。有关更清晰的语法介绍,请参阅下面的答案。在此答案中,“字段”不是 SQL 关键字。
    【解决方案3】:
     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');
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 对我有用,因为我需要在 where 中添加另一个子句。 UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%' AND otherfield='foo22'
      【解决方案5】:

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

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

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

      【讨论】:

      【解决方案6】:

      Replace 字符串函数可以做到这一点。

      【讨论】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        • 2019-09-18
        • 1970-01-01
        相关资源
        最近更新 更多