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
我想把 "更新 "一词改为 "新闻"。是否可以用一个脚本来做这件事?
我多年来一直到这里来寻找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
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....
只要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()
执行大小写敏感的匹配。
#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;
#5楼
得票数 7
除了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
中,没有必要在WHERE
子句中使用LIKE
。
#6楼
得票数 2
REPLACE功能在搜索和替换表格中的文本时非常方便,如更新过时的URL,纠正拼写错误等。
UPDATE tbl_name
SET
field_name = REPLACE(field_name,
string_to_find,
string_to_replace)
WHERE
conditions;