sql 路径范围内的记录列表
sql list of records within a path scope
我有一个母版 table 包含 URL:
CREATE TABLE IF NOT EXISTS MasterTable (url, masterId, PRIMARY KEY(url), UNIQUE(masterId));
url 字符串如下所示:file:///Users/user1/Folder1/Folder2/.../FolderN/filename1.jpeg
.
现在,我需要编写一个查询,对于路径示例 path = 'file:///Users/user1/Folder1/Folder2/Folder3'
将 return 所有 masterId
在此确切文件夹路径中但不在更远的文件名。
我想我必须使用一些 trim
函数的组合,但我自己想不出来。
使用 LIKE
然后计算路径中有多少 '/'
以确保您不会获得更深的文件夹。
SELECT masterId
FROM MasterTable
WHERE url like 'file:///Users/user1/Folder1/Folder2/Folder3/%'
AND length(url) - length( replace(url, '/', '') ) = 8
更通用:
AND length(url) - length( replace(url, '/', '') ) =
length('file:///Users/user1/Folder1/Folder2/Folder3/')
- length( replace('file:///Users/user1/Folder1/Folder2/Folder3/', '/', '') )
我有一个母版 table 包含 URL:
CREATE TABLE IF NOT EXISTS MasterTable (url, masterId, PRIMARY KEY(url), UNIQUE(masterId));
url 字符串如下所示:file:///Users/user1/Folder1/Folder2/.../FolderN/filename1.jpeg
.
现在,我需要编写一个查询,对于路径示例 path = 'file:///Users/user1/Folder1/Folder2/Folder3'
将 return 所有 masterId
在此确切文件夹路径中但不在更远的文件名。
我想我必须使用一些 trim
函数的组合,但我自己想不出来。
使用 LIKE
然后计算路径中有多少 '/'
以确保您不会获得更深的文件夹。
SELECT masterId
FROM MasterTable
WHERE url like 'file:///Users/user1/Folder1/Folder2/Folder3/%'
AND length(url) - length( replace(url, '/', '') ) = 8
更通用:
AND length(url) - length( replace(url, '/', '') ) =
length('file:///Users/user1/Folder1/Folder2/Folder3/')
- length( replace('file:///Users/user1/Folder1/Folder2/Folder3/', '/', '') )