如何在SQL中提取文件路径最后两个斜杠间字符串并转为MMDDYY格式
解决方案:提取路径片段并转换为MMDDYY格式
嘿,这个需求我刚好处理过类似的,咱们一步步来实现,完美兼容你提到的两种路径场景:
第一步:提取最后两个斜杠之间的字符串
核心思路是通过反转字符串来定位最后两个斜杠的位置,比正向查找要简单得多。以SQL Server为例,咱们用REVERSE、CHARINDEX和SUBSTRING组合实现:
DECLARE @FilePath NVARCHAR(255) = '\\filedirectory\Department\Project\2000-01-12\'; -- 先统一路径结尾:如果没有斜杠就补一个,避免边界问题 SET @FilePath = CASE WHEN RIGHT(@FilePath, 1) <> '\' THEN @FilePath + '\' ELSE @FilePath END; -- 反转路径,找到前两个斜杠的位置 DECLARE @ReversedPath NVARCHAR(255) = REVERSE(@FilePath); DECLARE @FirstSlashPos INT = CHARINDEX('\', @ReversedPath, 1); DECLARE @SecondSlashPos INT = CHARINDEX('\', @ReversedPath, @FirstSlashPos + 1); -- 截取反转后的中间片段,再反转回来得到目标字符串 DECLARE @TargetString NVARCHAR(20) = REVERSE(SUBSTRING(@ReversedPath, @FirstSlashPos + 1, @SecondSlashPos - @FirstSlashPos - 1)); SELECT @TargetString; -- 场景1返回'2000-01-12',场景2返回'20000112'
第二步:转换为MMDDYY格式
接下来针对两种不同的目标字符串格式,分别处理转换逻辑:
-- 基于上面的变量继续处理 DECLARE @MMDDYY NVARCHAR(8); SET @MMDDYY = CASE -- 场景1:带横杠的日期字符串(YYYY-MM-DD) WHEN @TargetString LIKE '%-%-%' THEN FORMAT(CAST(@TargetString AS DATE), 'MMddyy') -- 场景2:纯数字日期(YYYYMMDD),先插入横杠转成标准日期格式再转换 ELSE FORMAT(CAST(STUFF(STUFF(@TargetString, 5, 0, '-'), 8, 0, '-') AS DATE), 'MMddyy') END; SELECT @MMDDYY; -- 两种场景最终都会返回'011200'
整合到存储过程中
把上面的逻辑封装成存储过程,就能直接调用使用了:
CREATE PROCEDURE dbo.ConvertPathToMMDDYY @FilePath NVARCHAR(255), @ResultMMDDYY NVARCHAR(8) OUTPUT AS BEGIN SET NOCOUNT ON; -- 统一路径结尾的斜杠 SET @FilePath = CASE WHEN RIGHT(@FilePath, 1) <> '\' THEN @FilePath + '\' ELSE @FilePath END; -- 提取目标字符串 DECLARE @ReversedPath NVARCHAR(255) = REVERSE(@FilePath); DECLARE @FirstSlashPos INT = CHARINDEX('\', @ReversedPath, 1); DECLARE @SecondSlashPos INT = CHARINDEX('\', @ReversedPath, @FirstSlashPos + 1); DECLARE @TargetString NVARCHAR(20) = REVERSE(SUBSTRING(@ReversedPath, @FirstSlashPos + 1, @SecondSlashPos - @FirstSlashPos - 1)); -- 转换为MMDDYY格式 SET @ResultMMDDYY = CASE WHEN @TargetString LIKE '%-%-%' THEN FORMAT(CAST(@TargetString AS DATE), 'MMddyy') ELSE FORMAT(CAST(STUFF(STUFF(@TargetString, 5, 0, '-'), 8, 0, '-') AS DATE), 'MMddyy') END; END;
调用示例:
DECLARE @Output NVARCHAR(8); EXEC dbo.ConvertPathToMMDDYY '\\filedirectory\Departments\Project\20000112\', @Output OUTPUT; SELECT @Output; -- 输出'011200'
小提醒
- 如果用的不是SQL Server,只需要替换对应的字符串处理函数就行(比如MySQL用
REVERSE+LOCATE,Oracle用REVERSE+INSTR)。 - 担心日期格式无效的话,可以把
CAST换成TRY_CAST,这样遇到无效日期时会返回NULL,避免报错。
内容的提问来源于stack exchange,提问作者Yev
相关产品推荐
相关产品推荐

