日期:2014-05-17  浏览次数:20506 次

面试SQL题 得出表中含有文件的文件夹


表:
test

path              isfolder

/music/a.sql        F
/music/             T
/pic/               T
/pic/b.sql          F
/mnt/               T


表test中,path字段和isfolder字段

写SQL,列出文件夹中有文件的文件夹

请各位大侠指点!
SQL 面试

------解决方案--------------------

if object_id('test') is not null
drop table test
go
create table test
(
path nvarchar(20),
isfolder nvarchar(10)
)
go
insert into test
select '/music/a.sql','F' UNION ALL
select '/music/','T' UNION ALL
select '/pic/','T' UNION ALL
select '/pic/b.sql','F' UNION ALL
select '/mnt/','T'
go
--select len(path) -charindex('/',reverse(path)) from test where isfolder ='F'
--select reverse(right(reverse(path),len(path) -charindex('/',reverse(path)))),* from test 
--where isfolder ='F'
go
select
substring(
reverse(right(reverse(path),len(path) -charindex('/',reverse(path)))),
2,
len(path) -charindex('/',reverse(path))
)
from test 
where isfolder ='F'

------解决方案--------------------
select a.path, a.isfolder from 
(select * from test where isfolder = 'T') a 
inner join
(select * from test where isfolder = 'F') b 
on b.path like a.path + '%'