删除字符串的最后一部分 SQL

3

我有一个名为“路径(Path)”的字段,它看起来像这样:

/{e8cfdcba-9572-4c64-828f-dea54d8a00b7}/sites/BI_Center/euroreporting/Reports/BITraining/Elena/GroupingEx.rdl

我需要一个参数来选择文件夹名称,就像这样:

/sites/BI_Center/euroreporting/Reports/BITraining/Elena

我现在所做的是删除路径的第一部分。下面是代码:
SELECT replace(reverse(substring(reverse(Path), 1, ISNULL(NullIF(charindex('}',reverse(Path)),0),len(Path))) ),'}','') AS Path2 from Catalog

现在,我的路径看起来像这样:/sites/BI_Center/euroreporting/Reports/BITraining/Elena/GroupingEx.rdl 如何排除报表名称?(例如GroupingEx.rdl)。我尝试了MID函数,但它不起作用,因为报表名称的长度是可变的。
提前感谢您。
3个回答

3

这是其中的一种方法

declare @s varchar(200)
set @s='/sites/BI_Center/euroreporting/Reports/BITraining/Elena/GroupingEx.rdl'
select reverse(replace(reverse(@s),substring(reverse(@s),1,charindex('/',reverse(@s))),''))

编辑:

这个简单多了。

declare @s varchar(200)
set @s='/sites/BI_Center/euroreporting/Reports/BITraining/Elena/GroupingEx.rdl'
select substring(@s,1,len(@s)-charindex('/',reverse(@s)))

1
确实很有趣 +1 - PKirby
感谢@PKirby的评论。 - Madhivanan

0
我建议使用这个函数:
SUBSTRING([path], CHARINDEX('/', [path], 2), 
          LEN([path]) - CHARINDEX('/', [path], 2) - CHARINDEX('/', REVERSE([path]), 1) + 1)

对于这个路径:/sites/BI_Center/euroreporting/Reports/BITraining/Elena


0
declare @str varchar(250)
set @str = '/{e8cfdcba-9572-4c64-828f-dea54d8a00b7}/sites/BI_Center/euroreporting/Reports/BITraining/Elena/GroupingEx.rdl'
select substring ( 
        @str, --expression
        charindex('}', @str) + 1, --start
        len(@str) - charindex('/', reverse(@str)) - charindex('}', @str) --how many characters of the expression will be returned
    ) 

输出:

/sites/BI_Center/euroreporting/Reports/BITraining/Elena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接