Stone 2008-7-17 14:45
經典查詢問題(轉CSDN)
问题:
我在一个数据库表中保存某个目录下所有的文件和目录信息,比如目录名为Test ,下面还有子目录 subtest1,subtest2;Test 每个目录下都有一些文件,现在想知道如何通过SQL查询到某个目录下的子目录名称和当前目录所有文件?
有数据库表FileList
id filepath type
1 D:\test D
2 D:\test\a.txt f
2 D:\test\b.txt f
2 D:\test\c.txt f
2 D:\test\subtest1 D
2 D:\test\subtest2 D
2 D:\test\subtest1\subtest3 D
2 D:\test\subtest1\dfe.txt f
2 D:\test\subtest2\fewf.txt f
我想要的是:
期望输入 D:\test 时能得到结果应该为:
id filepath type
1 D:\test\subtest1 D
2 D:\test\subtest2 D
3 D:\test\a.txt f
2 D:\test\b.txt f
2 D:\test\c.txt f
期望输入 D:\test\subtest1 时能得到结果为:
id filepath type
2 D:\test\subtest1\dfe.txt f
2 D:\test\subtest1\subtest3 D
实际上就是想输入一个目录名,把当前目录下的文件和所有目录列出来。
Stone 2008-7-17 14:45
SQL codedeclare @FileList table([id] int,[filepath] nvarchar(25),[type] nvarchar(1))
Insert @FileList
select 1,N'D:\test',N'D' union all
select 2,N'D:\test\a.txt',N'f' union all
select 2,N'D:\test\b.txt',N'f' union all
select 2,N'D:\test\c.txt',N'f' union all
select 2,N'D:\test\subtest1',N'D' union all
select 2,N'D:\test\subtest2',N'D' union all
select 2,N'D:\test\subtest1\subtest3',N'D' union all
select 2,N'D:\test\subtest1\dfe.txt',N'f' union all
select 2,N'D:\test\subtest2\fewf.txt',N'f'
declare @filepath nvarchar(100)
set @filepath='D:\test'
Select
*
from
@FileList
where
patindex('%'+@filepath+'\%',[filepath])=1 and
stuff([filepath],1,patindex('%'+@filepath+'\%',[filepath])+len(@filepath),'') not like '%\%'
set @filepath='D:\test\subtest1'
Select
*
from
@FileList
where
patindex('%'+@filepath+'\%',[filepath])=1 and
stuff([filepath],1,patindex('%'+@filepath+'\%',[filepath])+len(@filepath),'') not like '%\%'
(9 個資料列受到影響)
id filepath type
----------- ------------------------- ----
2 D:\test\a.txt f
2 D:\test\b.txt f
2 D:\test\c.txt f
2 D:\test\subtest1 D
2 D:\test\subtest2 D
(5 個資料列受到影響)
id filepath type
----------- ------------------------- ----
2 D:\test\subtest1\subtest3 D
2 D:\test\subtest1\dfe.txt f
(2 個資料列受到影響)