MySQL字符串代表

我有一个包含网址(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 asked 2018-12-30T15:17:04Z
5个解决方案
1122 votes
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

现在的行就像

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

将会

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

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

Giraldi answered 2018-12-30T15:17:38Z
132 votes

是的,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_ answered 2018-12-30T15:18:13Z
17 votes

替换功能应该适合您。

REPLACE(str,from_str,to_str)

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

Jay answered 2018-12-30T15:18:42Z
6 votes

除了gmaggio的答案,如果你需要动态articles/news/other_table t2根据另一栏你可以做的例如:

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 answered 2018-12-30T15:19:13Z
5 votes

你可以简单地使用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;
Deepak Kumbhar answered 2018-12-30T15:19:56Z
translate from https://stackoverflow.com:/questions/5956993/mysql-string-replace