SQL Server如何按规则查找替换从url列提取无后缀文件名
解决方法
核心逻辑是先定位到fileName=的起始位置截取其后的内容,再移除文件后缀即可,以下是可用的SQL写法:
1. 查询转换(不修改原表数据)
如果所有文件后缀均为.mp3,可以用以下简单写法:
SELECT REPLACE(SUBSTRING(url, CHARINDEX('fileName=', url) + 8, LEN(url)), '.mp3', '') AS url FROM 你的表名;
如果需要兼容不同后缀、避免文件名中包含.mp3导致转换错误,推荐用更稳妥的写法:
SELECT SUBSTRING( file_segment, 1, LEN(file_segment) - CHARINDEX('.', REVERSE(file_segment)) ) AS url FROM ( -- 先截取出fileName=之后的完整文件名(带后缀) SELECT SUBSTRING(url, CHARINDEX('fileName=', url) + 8, LEN(url)) AS file_segment FROM 你的表名 -- 过滤掉不符合格式的记录避免报错 WHERE CHARINDEX('fileName=', url) > 0 ) AS temp
2. 直接更新原表字段
如果需要直接修改原表的url字段,使用以下UPDATE语句:
UPDATE 你的表名 SET url = SUBSTRING( SUBSTRING(url, CHARINDEX('fileName=', url) + 8, LEN(url)), 1, LEN(SUBSTRING(url, CHARINDEX('fileName=', url) + 8, LEN(url))) - CHARINDEX('.', REVERSE(SUBSTRING(url, CHARINDEX('fileName=', url) + 8, LEN(url)))) ) WHERE CHARINDEX('fileName=', url) > 0
注意事项
- 执行更新前建议先执行查询语句确认转换结果符合预期,避免数据错误
- 若部分记录不存在
fileName=标识或无文件后缀,会被WHERE条件过滤不会参与转换
内容的提问来源于stack exchange,提问作者Hossein Tasm
相关产品推荐
相关产品推荐

