MySQL 字符串替换

回答 6 浏览 79.2万 2011-05-10

我有一个包含尿液(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

我想把 "更新 "一词改为 "新闻"。是否可以用一个脚本来做这件事?

n00b 提问于2011-05-10
可能与MySql--更新字符串部分的方法重复?Steve Chambers 2016-08-02
我多年来一直到这里来寻找REPLACE(...)参数的顺序。如果这个问题被删除,我就不能再做我的工作了。谢谢!Nuno 2021-07-25
6 个回答
#1楼 已采纳
得票数 1423
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/

Giraldi 提问于2013-01-29
rogerdpack 修改于2017-12-15
Quick question, is it really needed to have "WHERE"子句?John Crawford 2013-07-17
@JohnCrawford 根据链接中的文章:"你不一定要在最后添加WHERE LIKE子句,因为如果要查找的文本不在那里,该行就不会被更新,但它应该会加快事情的进展."。Giraldi 2013-07-17
WHERE子句为你提供了对被替换内容的具体控制。如果没有子句,每一行都会被检查,如果发现有匹配的数据,可能会被替换。Carlton 2014-09-11
我相信在这种情况下,WHERE是没有用的,因为LIKE '%%'没有使用任何索引,如果在WHERE中还有其他部分,例如像date_added > '2014-07-01'这样的部分,可能会有帮助。Fabrizio 2014-09-23
当我需要替换mysql中的一些东西时,我总是来这里参考。Daniel Pecher 2015-04-13
#2楼
得票数 148

是的,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....
onteria_ 提问于2011-05-10
只要OP'的updates只在字符串中出现一次,那么这就可以了。否则你就只能直接操作字符串,这在MySQL中是非常痛苦的。在这一点上,写一个一次性的脚本来选择字段,在客户端进行操作,然后写回来,会更容易。Marc B 2011-05-10
#3楼
得票数 24

replace函数应该对你有用。

REPLACE(str,from_str,to_str)

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

Jay 提问于2011-05-10
Nicholas Shanks 修改于2017-06-22
#4楼
得票数 15

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

举例说明。

带有where条款--

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

不含where条款-

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

注意:上面的查询是为了直接更新表中的记录,如果你想进行选择查询,并且数据不应该在表中受到影响,那么可以使用下面的查询--

select REPLACE(columnName,'from','to') as updateRecord;
Deepak Kumbhar 提问于2018-01-30
Channa 修改于2021-07-26
#5楼
得票数 7

除了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

RafaSashi 提问于2013-10-13
#6楼
得票数 2

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

  UPDATE tbl_name 
    SET 
        field_name = REPLACE(field_name,
            string_to_find,
            string_to_replace)
    WHERE
        conditions;
Ganesh Giri 提问于2021-08-25
标签