2011-09-30 67 views
0

編輯輸出:沒有文件名或結尾的斜槓包括SQL查詢各具特色

我有一個數據庫,可能數以千計成千上萬的記錄(我們正在談論一個2MB的結果字符串,如果它只是SELECT * FROM xxx在標準使用情況。

現在爲這個結果不能爲更多的處理任何地方舉行安全的原因。

有一種情況我想與文件夾結構的每個層次提取所有記錄的路徑字段。

所以運行查詢的一種方法,我得到的根每一條記錄:

C:\ 

再次查詢另一種方式,我得到的第一個文件夾級別中的每個記錄:

C:\a\ 
C:\b\ 

然後,當然,我會莫名其妙地集團爲了回報

C:\a\ 
C:\b\ 

而不是

C:\a\ 
C:\a\ 
C:\b\ 
C:\b\ 

希望你有想法嗎? 任何答案,至少讓我在正確的方向我將感激。我真的很難從哪裏開始,因爲下載每個記錄和處理都遠遠不是理想的解決方案。 (這是我們現在所做的)。

樣本數據

C:\a\b\c\d 
C:\a\b\c 
C:\ 
C:\a\b 
C:\g 
D:\x 
D:\x\y 

樣本輸出1

C:\ 
D:\ 

樣本輸出2

C:\a 
C:\g 
D:\x 

樣本輸出3

C:\a\b 
D:\x\y 

樣本輸出4

C:\a\b\c 

樣本輸出5

C:\a\b\c\d 
+6

您使用的是什麼RDBMS? –

+1

我無法弄清楚你想要什麼/意思。請提供樣本數據和樣本查詢輸出。你打算去多少目錄級別? – Bohemian

+1

2MB只有一百萬個widechar字符,根本不多。如果你在數據庫中處理這個問題時遇到問題,你可以在任何程序代碼中處理它(你知道任何編程語言嗎?)。您不必將其存儲在磁盤上的任何位置,只需在內存中進行處理即可,您將會非常安全。 – GolezTrol

回答

0

如果你只有文件夾,你可以這樣做:SELECT DISTINCT path FROM table WHERE LENGTH(path) - LENGTH(replace(path,'\','')) = N

如果您只有文件名,則取決於您是否具有由RDBMS提供的INSTR函數(或某個正則表達式替換函數)。在所有情況下,取決於可用的字符串函數。

+0

啊哈這看起來很不錯,會有小提琴 – amcc

+0

看起來很有希望,但沒有考慮到一些情況。特別是,OP的例子不包含'C:\ a'路徑,只有子路徑,子路徑等文件夾。然而,根據問題,當相應級別被請求時,結果集預計包含'C:\ a'。 –

+0

同意我猜想,實際上這是最重要的第一個/第二個層次,因爲你深入使用'LIKE C:\ a \ b%'來縮小它 - 無論這是否相關。 – amcc