SQL中使用concat或substring在图片文件名前添加字母X的实现方法
解决方案
完全可以通过concat配合字符串定位、截取函数实现,根据你的Image字段存储内容的不同,有两种实现方式:
场景1:Image字段仅存储纯文件名
如果路径中的{tuesday}_1pm\属于固定前缀的一部分,Image字段只存最后的文件名(如示例中的{tuesday}_1_ggc9070bsgdg763013a06a54b9bf54e5),直接在Image前拼接你要的前缀即可:
-- 以下示例添加X前缀,替换为A/B等即可得到对应结果 SELECT CONCAT('copy \\library\common\photos\{tuesday}_1pm\', 'X', Image, '.', ImageType) FROM 你的表名;
场景2:Image字段存储「子目录+文件名」的相对路径
如果{tuesday}_1pm\{tuesday}_1_ggc9070bsgdg763013a06a54b9bf54e5整体是Image字段的值,就需要先定位路径中最后一个反斜杠的位置,拆分后插入前缀再拼接,不同数据库语法如下:
MySQL 实现
SELECT CONCAT( 'copy \\library\common\photos\', -- 截取最后一个反斜杠之前的路径部分 LEFT(Image, LENGTH(Image) - LOCATE('\\', REVERSE(Image)) + 1), 'X', -- 替换为你需要的A/B等前缀 -- 截取最后一个反斜杠之后的文件名部分 RIGHT(Image, LOCATE('\\', REVERSE(Image)) - 1), '.', ImageType ) FROM 你的表名;
SQL Server 实现
SELECT CONCAT( 'copy \\library\common\photos\', LEFT(Image, LEN(Image) - CHARINDEX('\', REVERSE(Image)) + 1), 'X', -- 替换为你需要的A/B等前缀 RIGHT(Image, CHARINDEX('\', REVERSE(Image)) - 1), '.', ImageType ) FROM 你的表名;
PostgreSQL 实现
SELECT CONCAT( 'copy \\library\common\photos\', LEFT(Image, LENGTH(Image) - STRPOS(REVERSE(Image), '\') + 1), 'X', -- 替换为你需要的A/B等前缀 RIGHT(Image, STRPOS(REVERSE(Image), '\') - 1), '.', ImageType ) FROM 你的表名;
内容的提问来源于stack exchange,提问作者sang jiang
相关产品推荐
相关产品推荐

