You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:49:39