Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

SQlite - LİKE

#sqlite3 #android #sqlite


Привет.
SELECT * FROM clients WHERE client_data LIKE '%Mark%' ORDER BY `client_id` ASC

Мне необходимо организовать поиск клиента в SQLite по имени (которое расположено
в тексте описания, не спрашивайте, пожалуйста, почему, такой мне ее дали), дело в том,
что когда я использую LIKE '%Mark%', то в результате находятся и строки где встречается
допустим слово markers (тут в принципе все правильно LIKE %% так и должен искать).
Вопрос в том, что можно использовать для поиска в SQLite слова (целиком) в тексте.
Желательно без использования библиотек.
Погуглил, но ничего путного не нашел. (Может плохо искал, в любом случае буду благодарен
даже за линк в гугле)
Заранее спасибо!
P.S 
Нашел как я считаю самое приемлемое решение. Оставлю здесь ответ если кому вдруг
понадобиться. Для полно текстового поиска лучше всего использовать FTS3 (Full-Text-Search).
Подробнее на английском, на русском
Если у кого-то есть решения получше, буду рад узнать.    


Ответы

Ответ 1



Недавно сам сталкивался с такой проблемой - проблемой поиска русских фраз в sqlite андроидовском. Все дело в операторах LIKE, ORDER BY, которые используют функцию UPPER() и которая не может корректно работать с русскими символами. Досадно. Поэтому есть 3 решения, по убыванию сложности: Скомпилировать sqlite с нужным расширением под Android NDK и юзать ее(см статью на Хабре) Использовать расширение, которое уже есть стандартно - FTS3. Создание специальных виртуальных таблиц с поддержкой поиска и использование оператора MATCH Создать в вашей таблице еще один столбец(нормализованный), который будет содержать ту же инфу по которой вам нужно провести поиск, только в верхнем(или нижнем) регистре и делать LIKE по этому столбцу, но результат возвращать по обычному столбцу. Я использовал 3 вариант и не прогадал. Наиболее простой и рабочий:)

Ответ 2



Собственно что мешает сделать вот так: ...client_data LIKE '% Mark %' мм...

Комментариев нет:

Отправить комментарий