从文件路径中提取文件名之前的文件夹名称

时间:2013-11-29 08:48:32

标签: sql sql-server tsql sql-server-2012

如何提取文件名前面的文件路径的文件夹名称?

示例:

declare @a varchar(200)
set @a = '/path/to/category1/filename.txt'
select right(@a, charindex('/', reverse(@a)) - 1)

这将返回filename.txt - 在另一列中,我现在想要获取“category1”文件夹名称。 如果路径更改为:  set @b = '/path/to/another/folder/category2/filename.txt' 它应该提取 category2

4 个答案:

答案 0 :(得分:5)

根据您的示例代码,您可以使用以下代码段

提取最后一个文件夹名称
declare @a varchar(200), @b varchar(200), @c varchar(200)
set @a = '/path/to/category1/filename.txt'
set @b = right(@a, charindex('/', reverse(@a)) - 1)
set @c = replace(@a, '/' + @b, '')
select right(@c, charindex('/', reverse(@c)) - 1), @b

在一个选择语句中(除了@a)

declare @a VARCHAR(200)
set @a = '/path/to/category1/filename.txt'

select right(replace(@a, '/' + right(@a, charindex('/', reverse(@a)) - 1), ''), charindex('/', reverse(replace(@a, '/' + right(@a, charindex('/', reverse(@a)) - 1), ''))) - 1) as folder, right(@a, charindex('/', reverse(@a)) - 1) as filename

答案 1 :(得分:1)

下面的替代方法:

declare @a varchar(200)
set @a = '/path/to/category1/filename.txt'


select reverse(
            SUBSTRING(reverse(@a),
                charindex('/', reverse(@a)) + 1 ,
                CHARINDEX('/',reverse(@a),charindex('/', reverse(@a))+ 1) - charindex('/', reverse(@a)) -1)
        )

答案 2 :(得分:0)

检查出来....最短的解决方案......

声明@a varchar(200) 设置@a ='/ path / to /category1 / filename.txt'

声明@a varchar(200) 设置@a ='/ path / to /category1 / filename.txt'

选择替换(右(SUBSTRING(@ a,0,(LEN(@a) - CHARINDEX('/',REVERSE(@ a),0)+1)),charindex('/',REVERSE(SUBSTRING) (@ a,0,(LEN(@a) - CHARINDEX('/',REVERSE(@ a),0)+1))),0)),'/','')

答案 3 :(得分:0)

另一种提取单独文件夹位置和文件名字符串的方法。

DECLARE @a VARCHAR(200) = '/path/to/category1/filename.txt'

SELECT LEFT(@a, LEN(@a)- LEN(RIGHT(@a,CHARINDEX('/',REVERSE(@a))-1))) Folder,
   RIGHT(@a,CHARINDEX('/',REVERSE(@a))-1) FileName

注意:如果您的文件路径字符串有反斜杠而不是正斜杠,只需更改 SELECT 语句中的斜杠即可。