2013-05-13 21 views
0

表[ID,數據]
數據是這樣的:如何查詢行類似的IndexOf

str[N] 

where子句是這樣的:

strs = 'str1#str2#str3#str4#str5......' 

,如果我用 '#' 把它分解,我有一個很大的陣列。然後我這樣寫:

select * from Table where data in(str1,str2,str3,str4,str5)....... 

長度可能非常大。這太慢了。我只想做:

select * from Table where 'str1#str2#str3#str4#str5......'.indexOf(data)!=-1 

謝謝!

+0

你嘗試創建正在運行的查詢領域的指數? – mihail 2013-05-13 14:45:43

+0

我覺得IN子句無法使用索引....當我知道SQL只能從http://www.sqlite.org/optoverview.html 告訴等於代替或LIKE – blackdog 2013-05-13 14:48:46

+0

如果創建一個索引使用聲明這樣的: > CREATE INDEX idx_ex1 ON EX1(A,b,C,d,E,...,Y,Z); 然後,如果索引的初始列(列A,B,等等)顯示在WHERE子句術語索引可以使用。索引的初始列必須與=或IN運算符一起使用。最右邊的列可以使用不等式。對於最右邊的列所使用的索引的,可以有多達必須夾住兩個極端之間的列的允許值兩個不等式。 – mihail 2013-05-13 14:53:01

回答

0

instr功能的SQLite中的等價物indexOf

或者,你可以使用類似LIKE

SELECT * 
    FROM table 
WHERE '#str1#str2#str3#' LIKE '%#' || data || '#%' 

...但我真的懷疑會更快。

注意,比較字符串都應該開始末與分離器(#),如果你不」要匹配data如子,但總是爲整個字符串。

你可能會想嘗試既要看到這是更快。

+0

我知道,但我也懷疑LIKE是否如你所願。我正在嘗試。 – blackdog 2013-05-13 14:51:26

+0

完成了!變得更快! – blackdog 2013-05-13 15:02:45

0

我想這應該使用LIKE可能:

SELECT * FROM Table WHERE 'str1#str2#str3#str4#str5......' LIKE '%' + data + '%' 

(SQL Server語法,但給人的總體思路)