0

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 |
+----------+------+

私はしばらくこれに苦労しているので、誰かが何かガイダンスを提供することができればそれは大いにありがたいです。

4

1 に答える 1

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

サブパスを削除するには、SQLite3.7.15で最近導入されたばかりのinstr()関数が必要です。

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/' || '*'))
于 2012-12-17T10:00:49.853 に答える