我不相信 MySQL 支持基于正则表达式的字符串替换——而且我在文档中没有看到类似的东西——但是你可以写一个这样的表达式:
CASE WHEN path_plus_filename REGEXP '^/wp-content/uploads/2012/10/.*[.]jpg$'
THEN REPLACE(path_plus_filename, '%2B', '_')
ELSE path_plus_filename
END
它返回path_plus_filename
,但用%2B
if _
(且仅当)整个事物匹配时替换 every ^/wp-content/uploads/2012/10/.*[.]jpg$
。
或者,如果你想要一个UPDATE
语句而不是一个查询,你可以写:
UPDATE table_that_contains_path_plus_filename_column
SET path_plus_filename = REPLACE(path_plus_filename, '%2B', '_')
WHERE path_plus_filename REGEXP '^/wp-content/uploads/2012/10/.*[.]jpg$'
;
编辑添加:顺便说一句,这既不是这里也不是那里,但是-您的正则表达式的问题是它需要%2B
在前面/wp-content/uploads/2012/10/
加上正好一个字符,后面正好是两个字符加上jpg
。要在允许的字符数方面获得一定的灵活性,您需要使用.*
(“零个或多个字符”) 或.+
(“一个或多个字符”) 或.{5,20}
(“五个到二十个字符”) 或诸如此类。