MySQL字符串替换


559

我有一列包含网址(ID,网址)的列:

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

我想将“更新”一词更改为“新闻”。是否可以使用脚本来做到这一点?


Answers:


1283
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/


23
快速的问题,是否真的需要“ WHERE”子句?
约翰·克劳福德

55
@JohnCrawford根据链接中的文章:“您不必WHERE LIKE在末尾添加该子句,因为如果要查找的文本不存在,则该行将不会更新,但可以加快处理速度。 ”
Giraldi 2013年

3
WHERE子句使您可以控制要替换的内容。如果没有一行,将检查每一行,如果找到匹配项,则可能替换数据。
卡尔顿2014年

11
我认为在这种情况下WHERE是无用的,因为a LIKE '%%'不使用任何索引,如果该WHERE中还有其他部分,例如类似的东西date_added > '2014-07-01'可能有所帮助
Fabrizio 2014年

13
当我需要替换mysql中的某些内容时,我总是来这里参考
Daniel Pecher

141

是的,MySQL具有REPLACE()函数:

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

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

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

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

只要OP updates仅在字符串中显示一次,就可以使用。否则,您将被直接字符串操作所困扰,这在MySQL中是真正的痛苦。到那时,编写一次性脚本来选择字段,在客户端中进行操作然后写回会更容易。
Marc B

20

替代函数应该为你工作。

REPLACE(str,from_str,to_str)

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


9

您可以简单地使用replace()函数,

带有where子句-

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

没有where条款-

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

注意:上面的查询是否直接在表中进行更新记录,如果要在选择查询中使用,并且表中的数据不受影响,则可以使用以下查询:

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

6

除了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,无需LIKEWHERE子句中使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.