如何使用T-SQL查询列出存在对应.zip压缩包的重复文件夹
T-SQL 匹配ZIP压缩包对应解压文件夹实现
假设存储硬盘文件信息的表名为DiskFileInfo,可替换为实际使用的表名。
仅输出匹配的文件夹(符合期望输出样例)
SELECT f.ItemName, f.Extension, f.ItemType FROM DiskFileInfo f INNER JOIN DiskFileInfo zip ON zip.ItemType = 'File' AND zip.Extension = '.zip' AND LEFT(zip.ItemName, LEN(zip.ItemName) - 4) = f.ItemName WHERE f.ItemType = 'Folder' -- 可根据实际需求扩展需要过滤的后缀列表 AND ISNULL(f.Extension, '') NOT IN ('.docx', '.msg')
同时输出匹配的文件夹和对应压缩包(标注重复项)
如果需要同时展示对应的压缩包文件,方便批量处理重复项,可以使用如下语句:
-- 输出匹配的文件夹 SELECT f.ItemName, f.Extension, f.ItemType, '解压生成的重复文件夹' AS Remark FROM DiskFileInfo f INNER JOIN DiskFileInfo zip ON zip.ItemType = 'File' AND zip.Extension = '.zip' AND LEFT(zip.ItemName, LEN(zip.ItemName) - 4) = f.ItemName WHERE f.ItemType = 'Folder' AND ISNULL(f.Extension, '') NOT IN ('.docx', '.msg') UNION ALL -- 输出对应的压缩包文件 SELECT zip.ItemName, zip.Extension, zip.ItemType, '对应源压缩包' AS Remark FROM DiskFileInfo f INNER JOIN DiskFileInfo zip ON zip.ItemType = 'File' AND zip.Extension = '.zip' AND LEFT(zip.ItemName, LEN(zip.ItemName) - 4) = f.ItemName WHERE f.ItemType = 'Folder' AND zip.Extension NOT IN ('.docx', '.msg')
逻辑说明
- 采用自连接的方式,将文件夹和ZIP格式的文件做关联匹配
- 匹配规则为ZIP文件的文件名去掉
.zip后缀(长度4位)和文件夹名称完全一致 - 用
ISNULL处理文件夹Extension为null的场景,避免过滤规则失效 - 可直接在NOT IN列表中扩展需要过滤的其他无关后缀
内容的提问来源于stack exchange,提问作者Adam Craven
相关产品推荐
相关产品推荐

