MySQL字符串替换

Posted

技术标签:

【中文标题】MySQL字符串替换【英文标题】:MySQL string replace 【发布时间】:2011-08-22 20:31:12 【问题描述】:

我有一列包含 url (id, url):

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

我想将“更新”一词更改为“新闻”。是否可以使用脚本来执行此操作?

【问题讨论】:

mysql - Way to update portion of a string?的可能重复 多年来我一直在这里寻找 REPLACE(...) 参数的顺序。如果这个问题被删除,我将无法再做我的工作。谢谢! 【参考方案1】:

REPLACE 功能非常方便地搜索和替换表格中的文本,例如更新过时的 URL、纠正拼写错误等。

  UPDATE tbl_name 
    SET 
        field_name = REPLACE(field_name,
            string_to_find,
            string_to_replace)
    WHERE
        conditions;

【讨论】:

【参考方案2】:

你可以简单地使用 replace() 函数。

例子:

带有where子句-

update tableName set columnName=REPLACE(columnName,'from','to') where condition;

没有where子句-

update tableName set columnName=REPLACE(columnName,'from','to');

注意:上面的查询如果是直接在表中更新记录,如果你想在select查询并且不影响表中的数据那么可以使用下面的查询-

select REPLACE(columnName,'from','to') as updateRecord;

【讨论】:

【参考方案3】:
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

现在的行就像

http://www.example.com/articles/updates/43

将是

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/

【讨论】:

小问题,真的需要“WHERE”子句吗? @JohnCrawford 根据链接中的文章:“您不一定要在末尾添加 WHERE LIKE 子句,因为如果要查找的文本不存在,则该行将不会”不会更新,但应该会加快速度。” WHERE 子句让您可以具体控制要替换的内容。如果没有,将检查每一行,如果找到匹配项,则可能会替换数据。 我相信在这种情况下 WHERE 是无用的,因为 LIKE '%%' 不使用任何索引,如果 WHERE 中有其他部分,例如 date_added > '2014-07-01' 它可能会有所帮助跨度> 当我需要替换mysql中的东西时,我总是来这里参考【参考方案4】:

replace 函数应该适合你。

REPLACE(str,from_str,to_str)

返回字符串 str,其中所有出现的字符串 from_str 都替换为字符串 to_str。 REPLACE() 在搜索 from_str 时执行区分大小写的匹配。

【讨论】:

【参考方案5】:

除了gmaggio的回答如果你需要根据另一列动态REPLACEUPDATE你可以这样做例如:

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

在我的示例中,字符串articles/news/ 存储在other_table t2 中,并且不需要在WHERE 子句中使用LIKE

【讨论】:

【参考方案6】:

是的,MySQL 有一个 REPLACE() 函数:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

请注意,如果您在使用 SELECT 时将其设为别名会更容易

SELECT REPLACE(string_column, 'search', 'replace') as url....

【讨论】:

只要 OP 的 updates 只在字符串中出现一次,那么这将起作用。否则,您将陷入直接的字符串操作,这在 MySQL 中是一个真正的痛苦。到那时,编写一个一次性脚本来选择字段,在客户端进行操作,然后写回会更容易。

以上是关于MySQL字符串替换的主要内容,如果未能解决你的问题,请参考以下文章

mysql中如何进行模糊替换

MySQL replace函数替换字符串语句的用法(mysql字符串替换)

mysqlnan替换为0

mysql怎么批量替换首字符?

MySQL可以替换多个字符吗?

MYSQL数据库里面的字段怎么随机替换字符