我有一个包含网址(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
我想将“更新”改为“新闻”。是否可以使用脚本执行此操作?
答案 0 :(得分:1208)
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
答案 1 :(得分:137)
是的,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....
答案 2 :(得分:19)
replace功能应该适合您。
REPLACE(str,from_str,to_str)
返回字符串str,其中所有出现的字符串from_str都替换为字符串to_str。 REPLACE()
在搜索from_str时执行区分大小写的匹配。
答案 3 :(得分:7)
您可以简单地使用replace()函数,
with 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;
答案 4 :(得分:6)
除了gmaggio的回答,如果您需要动态REPLACE
和UPDATE
根据您可以做的其他专栏,例如:
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
中,无需在LIKE
子句中使用WHERE
。