Извлечь каталог из поля Files в таблице SQLite - PullRequest
1 голос
/ 04 августа 2010

У меня есть таблица SQLite с полем с именем FullFilename. Теперь я хочу выбрать строки файлов в определенной папке. Допустим, таблица содержит:

c:\folder\file1.jpg
c:\folder\file2.jpg
c:\folder\subfolder\file1.jpg
c:\anotherfolder\file1.jpg

И я хочу выделить только строки с файлами в "c: \ folder \". Не в подпапке "c: \ folder \ subfolder \". Это:

SELECT FullFilename FROM Files WHERE fullfilename LIKE "c:\folder\%"

не будет работать, потому что он также дает мне файлы в подпапке.

Как извлечь строки файлов в определенной папке, не получая файлы в подпапках?

Редактировать

Поскольку ответ немного скрыт в комментарии ниже: Вот правильный ответ, который дал Марк:

SELECT FullFilename FROM Files 
WHERE fullfilename LIKE 'c:\folder\%' AND
      fullfilename NOT LIKE 'c:\folder\%\%'

Я удалил функцию lower (), так как согласно документации SQLite оператор LIKE уже нечувствителен к регистру.

Ответы [ 3 ]

1 голос
/ 04 августа 2010

Если синтаксис в SQLLite не отличается от большинства других форм SQL, вам следует заменить двойные кавычки на одинарные. Сделав это, запрос должен вернуть все записи, где полное имя файла начинается с точной строки c: \ folder \ - вы можете изменить запрос так:

SELECT FullFilename FROM Files WHERE lower(fullfilename) LIKE 'c:\folder\%'

, если значения полного имени не всегда хранятся в нижнем регистре; Имена файлов Windows не чувствительны к регистру.

Обратите внимание, что этот запрос вернет все файлы в этой папке и все подпапки.

Лично я бы порекомендовал использовать отдельные поля для имени файла и пути к файлу - это облегчает запрос.

0 голосов
/ 04 августа 2010

Синтаксис SQL использует% вместо * в качестве символа подстановки в предложении LIKE.

0 голосов
/ 04 августа 2010

Используйте % вместо *.Для оператора LIKE % и _ являются аналогами с подстановочными знаками для * и ?, соответственно, которые используются при глобализации оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...