请求协助编写MySQL批量重命名剧集名称的SQL替换语句
解决MySQL中剧集名称的批量格式化问题
嘿,这个需求很典型,我来帮你用SQL批量搞定!我们可以借助MySQL的字符串处理函数,精准提取季数、集数并补0,再拼接回原格式。
步骤1:先验证格式化结果(重要!)
在执行更新之前,一定要先运行查询语句确认输出的格式是否符合预期,避免误改数据:
SELECT name AS original_name, CONCAT( -- 提取剧集前缀(比如"Arrow") SUBSTRING_INDEX(name, ' - ', 1), ' - S', -- 提取季数并补0到两位(S1 → S01) LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(name, 'E', 1), 'S', -1), 2, '0'), 'E', -- 提取集数并补0到两位(E9 → E09,E10保持不变) LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' - ', 2), 'E', -1), 2, '0'), ' - ', -- 提取剧集标题后缀(比如"Year's End") SUBSTRING_INDEX(name, ' - ', -1) ) AS formatted_name FROM shows -- 只匹配符合"XX - SxEy - XX"格式的记录,避免修改其他数据 WHERE name REGEXP '^.+ - S[0-9]+E[0-9]+ - .+$';
步骤2:执行批量更新
如果上面的查询结果完全符合你的要求,就可以运行UPDATE语句批量修改:
UPDATE shows SET name = CONCAT( SUBSTRING_INDEX(name, ' - ', 1), ' - S', LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(name, 'E', 1), 'S', -1), 2, '0'), 'E', LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' - ', 2), 'E', -1), 2, '0'), ' - ', SUBSTRING_INDEX(name, ' - ', -1) ) WHERE name REGEXP '^.+ - S[0-9]+E[0-9]+ - .+$';
关键函数说明
SUBSTRING_INDEX(str, delim, count):按分隔符截取字符串,比如SUBSTRING_INDEX(name, ' - ', 1)取第一个-前的内容。LPAD(str, length, padstr):向左填充字符,把季数/集数补成2位,不足的用0填充(比如"1"变成"01","10"保持"10")。REGEXP:用正则表达式过滤目标记录,确保只修改符合格式的剧集名称。
注意事项
- 执行UPDATE前务必备份数据,或者先在测试环境验证!
- 如果你的表字段名不是
name,记得替换成实际的字段名(比如show_title)。
内容的提问来源于stack exchange,提问作者Daniel Peters
相关产品推荐
相关产品推荐

