2013-03-01 4 views
1

У меня есть БД с 4-мя колоннами,Как выполнить толерантного поиск по имени в БД SQLite

|ID|CATEGORY|NAME|NATION| 

И есть метод поиска, который просто делает SELECT WHERE NAME LIKE SEARCHKEYWORD, чтобы возвратить найденную деталь, но это ISN» t очень функционально, потому что ключевое слово должно быть идентично имени, чтобы найти что-то.

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

+0

С концами и содержит поиски, запрос теряет эффективность, потому что индекс не может использоваться, и запрос должен проверять каждую строку в таблице. – Tim

+0

Если это разрешено в Android, SQLite также имеет оператор GLOB. http://www.sqlite.org/lang_expr.html – Tim

ответ

1

Использование: SELECT * FROM DBNAME WHERE lower(NAME) LIKE '%SEARCHKEYWORD%' И всегда делают SEARCHKEYWORD в нижнем регистре.

+0

, если имя содержит пробелы, не работает, например, имя Mustang GT, ключевое слово mustang gt ... возвращает пустой запрос – AndreaF

+0

Я верю потому что случаи не совпадают. Я отредактировал ответ. Пожалуйста, попробуйте модифицированное решение и дайте мне знать. – kdehairy

1

Используйте этот запрос, чтобы выбрать то, что когда-либо вы даете входные данные

SELECT * FROM DBNAME WHERE NAME LIKE '%SEARCHKEYWORD%' 

или использовать первые буквы

SELECT * FROM DBNAME WHERE NAME LIKE 'SEARCHKEYWORD%' 

от последнего

SELECT * FROM DBNAME WHERE NAME LIKE '%SEARCHKEYWORD' 
+0

Ошибка приложения и я получаю синтаксическую ошибку около% – AndreaF

+0

, пожалуйста, напишите код –

+0

в вашем коде miss the ', по этой причине я получил ошибку, , однако если имя содержит пробелы не работают, например, имя Mustang GT, ключевое слово mustang gt ... возвращает пустой запрос – AndreaF