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

SQL Server中如何移除第四个‘\’左侧的所有文本?

在SQL Server中移除字符串第四个反斜杠左侧的内容

你需要处理的字符串如下:

pw:\abcdef-uk-ldn-pw.acme.com:abcdef-uk-ldn-pw-02\Documents\_Demonstration\PROJ1_JAC\30 Project Data\A - Architecture\03 - Documents\PROJ1_JAC-JAC-XX-00-D-A-0001

目标是移除第四个\左侧的所有内容,得到:

_Demonstration\PROJ1_JAC\30 Project Data\A - Architecture\03 - Documents\PROJ1_JAC-JAC-XX-00-D-A-0001

SQL Server没有MySQL的SUBSTRING_INDEX()函数,这里提供两种可行的实现方法:

方法一:嵌套CHARINDEX定位截取(兼容所有SQL Server版本)

通过逐层定位每个反斜杠的位置,找到第四个\的位置后,截取其右侧的内容:

DECLARE @inputStr NVARCHAR(MAX) = 'pw:\\abcdef-uk-ldn-pw.acme.com:abcdef-uk-ldn-pw-02\\Documents\\_Demonstration\\PROJ1_JAC\\30 Project Data\\A - Architecture\\03 - Documents\\PROJ1_JAC-JAC-XX-00-D-A-0001';

-- 依次定位第1到第4个反斜杠的位置
DECLARE @pos1 INT = CHARINDEX('\', @inputStr);
DECLARE @pos2 INT = CHARINDEX('\', @inputStr, @pos1 + 1);
DECLARE @pos3 INT = CHARINDEX('\', @inputStr, @pos2 + 1);
DECLARE @pos4 INT = CHARINDEX('\', @inputStr, @pos3 + 1);

-- 截取第四个反斜杠右侧的内容
SELECT SUBSTRING(@inputStr, @pos4 + 1, LEN(@inputStr) - @pos4) AS Result;

也可以把定位逻辑合并成一行更简洁的写法:

DECLARE @inputStr NVARCHAR(MAX) = 'pw:\\abcdef-uk-ldn-pw.acme.com:abcdef-uk-ldn-pw-02\\Documents\\_Demonstration\\PROJ1_JAC\\30 Project Data\\A - Architecture\\03 - Documents\\PROJ1_JAC-JAC-XX-00-D-A-0001';

SELECT SUBSTRING(
    @inputStr,
    CHARINDEX('\', @inputStr, 
        CHARINDEX('\', @inputStr, 
            CHARINDEX('\', @inputStr, 
                CHARINDEX('\', @inputStr) + 1
            ) + 1
        ) + 1
    ) + 1,
    LEN(@inputStr)
) AS Result;

方法二:使用STRING_SPLIT+STRING_AGG(SQL Server 2016及以上)

利用字符串分割和聚合函数,跳过前3个分割项(对应前三个反斜杠分隔的内容),将剩余项重新拼接:

DECLARE @inputStr NVARCHAR(MAX) = 'pw:\\abcdef-uk-ldn-pw.acme.com:abcdef-uk-ldn-pw-02\\Documents\\_Demonstration\\PROJ1_JAC\\30 Project Data\\A - Architecture\\03 - Documents\\PROJ1_JAC-JAC-XX-00-D-A-0001';

SELECT STRING_AGG(value, '\') AS Result
FROM (
    SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM STRING_SPLIT(@inputStr, '\')
) AS splits
WHERE rn >= 4; -- 跳过前3个分割项,从第4项开始拼接

说明

  • 方法一兼容性强,适合所有SQL Server版本,逻辑直观但写法稍繁琐;
  • 方法二更简洁,但依赖SQL Server 2016及以后版本的STRING_SPLIT和STRING_AGG函数。

内容的提问来源于stack exchange,提问作者David Perrie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:55:19