如何提取文件名前面的文件路径的文件夹名称?
示例:
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 。
答案 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 语句中的斜杠即可。