SQL提取斜杠分隔字符串前两部分的实现方法咨询
提取路径前两级目录的SQL解法
我明白你的需求啦——要从类似folder/subfolder/file/doc或folder/subfolder/doc的路径字符串里,精准提取出前两级目录folder/subfolder对吧?之前用LEFT和RIGHT的思路没找对关键位置,其实核心是要定位到第二个斜杠的位置,这样就能准确截取我们需要的部分了。
针对SQL Server环境(从你用CHARINDEX的语法来看应该是这个环境),可以用嵌套CHARINDEX结合LEFT的方式实现,同时还要处理一些边界情况,比如路径刚好只有两级的情况:
SELECT [Cat], CASE -- 当路径中有至少两个斜杠时,截取到第二个斜杠之前的内容 WHEN LEN([Cat]) - LEN(REPLACE([Cat], '/', '')) >= 2 THEN LEFT([Cat], CHARINDEX('/', [Cat], CHARINDEX('/', [Cat]) + 1) - 1) -- 当路径只有一个斜杠(刚好两级目录),直接返回原路径 WHEN LEN([Cat]) - LEN(REPLACE([Cat], '/', '')) = 1 THEN [Cat] -- 没有斜杠的情况,根据需求返回原内容或NULL,这里默认返回原内容 ELSE [Cat] END AS doc_cat FROM YourTableName
代码解释:
CHARINDEX('/', [Cat], CHARINDEX('/', [Cat]) + 1):先找到第一个斜杠的位置,然后从这个位置的下一位开始查找第二个斜杠,得到的就是第二个斜杠在字符串中的索引位置。LEFT([Cat], ... - 1):截取从字符串开头到第二个斜杠前一位的内容,刚好就是前两级目录。CASE语句:用来处理不同的边界情况,避免因为路径格式不同导致的错误结果。
测试示例:
原路径[Cat] | 提取结果doc_cat |
|---|---|
folder/subfolder/file/doc | folder/subfolder |
folder/subfolder/doc | folder/subfolder |
folder/subfolder | folder/subfolder |
single-folder | single-folder |
内容的提问来源于stack exchange,提问作者sql2015
相关产品推荐
相关产品推荐

