2013-05-13 1 views
0

таблицы [идентификатор, данные]
данные, как это:Как запрашивать строки как IndexOf

str[N] 

, где положение, как это:

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

+0

Я думаю, что предложение IN не может использовать индекс .... Как я знаю, sql может указывать только equals вместо IN или LIKE – blackdog

+0

с http://www.sqlite.org/optoverview.html Если индекс создан используя такой оператор: > CREATE INDEX idx_ex1 ON ex1 (a, b, c, d, e, ..., y, z); Тогда индекс может использоваться, если начальные столбцы индекса (столбцы a, b и т. Д.) Появляются в терминах WHERE. Начальные столбцы индекса должны использоваться с операторами = или IN. В правой колонке, которая используется, может использоваться неравенство. Для самого правого столбца используемого индекса может быть до двух неравенств, которые должны сэндвич допустимых значений столбца между двумя крайними значениями. – mihail

ответ

0

instr функция эквивалентна SQLite по indexOf.

В качестве альтернативы, вы можете использовать что-то вроде LIKE:

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

... но я действительно сомнения, что будет быстрее.

Обратите внимание, что строка сравнения оба должны начать и конец с разделителем (#), если вы не хотите, чтобы»соответствовать data как подстроки, но всегда как всей строки.

Возможно, вам захочется попробовать обеими, чтобы увидеть, что быстрее.

+0

Я знаю это, но я также сомневался в том, что это так. Я сейчас пытаюсь. – blackdog

+0

все делается! Станьте быстрее! – blackdog

0

Я думаю, что это должно быть возможно с помощью LIKE:

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

(синтаксис SQL Server, но дает общее представление)

Смежные вопросы