首页 > 解决方案 > MySQL:删除 WordPress 上传路径之间的数字字符串

问题描述

长话短说.. WordPress S3 卸载插件留下了一些图像,例如 /uploads/2020/10/182739640/filename-e324923424.jpg

随机数字符串 (182739640) 不固定。它有几个数字组合。

我正在寻找一种解决方案,以在 /uploads/2020/10/ 之后和 /filename.jpg 之前定位和删除随机数字符串“ 82734642 ”。

所以结果会是;/uploads/2020/10/filename-e324923424.jpg

当我查看论坛时,我确实找到了这个;https://stackoverflow.com/a/36492830/7142359,尽管这可能会在以后删除完整路径中的所有数字 - 这是我不想要的。

对此提供一些帮助会有所帮助。

提前致谢。

标签: mysqlstringnumeric

解决方案


我了解您需要删除倒数第二个和倒数第三个斜杠之间的所有数值。由于这看起来像是一次性练习,我建议直接在数据库上执行此操作(一旦在本地数据库上测试过)

您需要在查询中使用 REPLACE 方法,并通过使用 SUBSTRING_INDEX 获取不需要的数值来定位它们。

UPDATE 查询: UPDATE images SET title = REPLACE(title, concat(substring_index(substring_index(title, "/", -2), "/", 1), "/"), "")

假设表名是 images。根据需要更改 假设提交的名称是标题。根据需要更改“SET”允许您更新字段“REPLACE”允许您替换字符串(REF . https://www.w3resource.com/mysql/string-functions/mysql-replace-function.php)“concat " 允许您在末尾使用斜杠连接目标数字字符串 “SUBSTRING_INDEX”允许您使用分隔符拆分值,在本例中为“/”。值得添加一个 where 子句以仅在几条记录上运行更新查询。

注意:请在运行更新之前运行选择查询,以查看您是否获取了正确的字符串。

例如。SELECT title as title_before, substring_index(substring_index(title, "/", -2), "/", 1) as string_to_be_replaced, REPLACE(title, concat(substring_index(substring_index(title, "/", -2), "/ ", 1), "/"), "") as title_after FROM images 如果您注意到 title_after 是正确的,则继续在本地数据库上运行更新查询 a) 使用 WHERE 子句将更新限制为少数记录. b) 备份表后,然后在生产环境中运行它。

希望这可以帮助。


推荐阅读