You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从路径列表中获取指定目录的直接项(不含子目录内容)

解决方法

要获取指定文件夹下的直接项(不含子目录内容),可以通过以下几种SQL实现方式:

方法1:使用字符串函数判断层级

适用于大多数支持字符串操作的数据库(如SQLite、MySQL):

SELECT rowid FROM data 
WHERE path = 'c:/data/' 
OR (
    path LIKE 'c:/data/%' 
    AND INSTR(SUBSTR(path, LENGTH('c:/data/') + 1), '/') = 0
);
  • 逻辑说明:
    • 首先匹配文件夹本身(path = 'c:/data/')
    • 对于以c:/data/开头的路径,截取该前缀后的部分,检查是否不包含斜杠——如果没有斜杠,说明是当前目录的直接子项(文件或一级子目录),而非更深层级的内容

方法2:使用通配符匹配(SQLite专属)

利用SQLite的GLOB通配符特性,更简洁地实现筛选:

SELECT rowid FROM data
WHERE path = 'c:/data/'
OR (
    path GLOB 'c:/data/*' 
    AND path NOT GLOB 'c:/data/*/*'
);
  • 逻辑说明:
    • path GLOB 'c:/data/*'匹配所有以c:/data/开头的子项
    • path NOT GLOB 'c:/data/*/*'排除包含更深层级(即存在第二个/)的路径
    • 加上对文件夹本身的匹配,最终得到目标结果

方法3:路径拆分判断层级(适用于PostgreSQL等支持数组函数的数据库)

通过拆分路径为数组,判断层级数量:

SELECT rowid FROM data
WHERE 
    array_length(string_to_array(trim(trailing '/' FROM path), '/'), 1) = 2
    OR path = 'c:/data/';
  • 逻辑说明:
    • trim(trailing '/' FROM path)去掉路径结尾的斜杠,统一格式
    • string_to_array(...)将路径按/拆分为数组
    • array_length(...) = 2表示拆分后只有2个部分(如c:和data的直接子项),确保是当前目录的直接内容

内容的提问来源于stack exchange,提问作者Ulrich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:15:30