2010-08-04 36 views
1

我有一個名爲FullFilename的字段的SQLite表。現在,我想選擇某個文件夾中的文件行。假設該表包含:從SQLite表中的文件字段中提取目錄

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\%\%' 

我取出下面的()函數,根據 LIKE運算符已經不區分大小寫。

回答

1

除非SQLLite中的語法與大多數其他形式的SQL不同,否則應該將雙引號字符更改爲單引號。這樣做之後,查詢應返回,其中fullfilename開始與精確串c中的所有記錄:\文件夾\ - 你可能要修改查詢是:

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

除非fullfilename值總是存儲在小寫; Windows文件名不區分大小寫。

請注意,此查詢將返回此文件夾和所有子文件夾中的所有文件。

我個人建議使用單獨的字段作爲文件名和文件路徑 - 它使查詢變得更容易。

+0

我猜我的問題是不可能的。我決定處理SQL語句之外的目錄提取。 – 2010-08-14 20:00:21

+2

對不起,1月 - 如果你想要文件在c:\ folder \裏面,但不在任何子文件夾內,你可以試試'SELECT FullFilename FROM Files WHERE lower(fullfilename)LIKE'c:\ folder \%'and lower(fullfilename)NOT像'c:\文件夾\%\%'' – 2010-08-14 23:32:06

+0

哇,這實際上很好。這麼簡單。爲什麼我經常監督簡單的解決方案?謝謝馬克。 – 2010-08-15 10:28:15

0

使用%而不是*。對於LIKE運營商,%_分別是*?的通配符對應項,如shell globbing中所使用的。

+0

糟糕。只是修復它。 – 2010-08-04 15:59:00

0

SQL語法在LIKE子句中使用%而不是*作爲通配符。

+0

謝謝。我修好了它。 – 2010-08-04 15:59:44