查看完整版本: 經典查詢問題(轉CSDN)

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 個資料列受到影響)
页: [1]
查看完整版本: 經典查詢問題(轉CSDN)