2012-12-16 49 views
0

我在包含文件路徑的SQLite數據庫中有一列。給定文件路徑的一部分,我需要返回所有下一個文件夾。我還想返回下一個部分是否是字符串中的最後一個路徑(或者不以'/'結尾)。所以,如果我有文件夾:用於查找文件路徑的SQLite查詢

/my/folder/one 
/my/folder/two 
/my/folder/path/three 
/another/path 
/one/two/three 

和我有路徑:

/my/folder/ 

結果將返回沿着線的東西:

+----------+------+ 
| isLast | item | 
+----------+------+ 
| 1  | one | 
| 1  | two | 
| 0  | path | 
+----------+------+ 

我一直在掙扎這一段時間,如果任何人都可以提供任何指導,將不勝感激。

+0

您是否已經在SQL中擁有文件夾路徑? – twoleggedhorse

+0

是的,文件夾路徑存儲在單獨的列中。 – Nick

回答

1

這個查詢:

SELECT item NOT GLOB '*/*' AS isLast, 
     item 
FROM (SELECT substr(MyPath, length('/my/folder/') + 1) AS item 
     FROM MyTable 
     WHERE MyPath GLOB '/my/folder/' || '*') 

會給你這樣的結果:

isLast item 
------ ---- 
1  one 
1  two 
0  path/three 

卸下子路徑需要instr() function,這是最近纔在SQLite的3.7.15介紹:

SELECT isLast, 
     CASE WHEN isLast 
     THEN item 
     ELSE substr(item, 1, instr(item, '/') - 1) 
     END AS item 
FROM (SELECT item NOT GLOB '*/*' AS isLast, 
      item 
     FROM (SELECT substr(MyPath, length('/my/folder/') + 1) AS item 
      FROM MyTable 
      WHERE MyPath GLOB '/my/folder/' || '*')) 
+0

我可以與...合作...謝謝! – Nick

+0

很棒找到CL! – Du3

+0

3.7.15 6天前發佈!原來你的答案是最先進的。 ;)也許你想更新它來顯示你可以用'instr()'完成什麼? –