Строка SQLite содержит другой строковый запрос


111

Как мне это сделать?

Например, если мой столбец - «кошки, собаки, птицы», и я хочу получить строки, в которых столбец содержит кошек?


3
отредактируйте свой вопрос с помощью набора образцов данных. Трудно точно определить, о чем вы просите.
p.campbell

С 100-м голосованием "за".
епископ

Ответы:


196

Использование LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive

4
Имейте в виду, что это не подходит, если строка, которую вы ищете, является переменной или содержит специальный символ, например %.
Сэм

10
если «коты» - это поле из другой таблицы, вы можете использовать '%'||table2.field||'%'аналогичные критерии
Стефан Гл.

96

Хотя LIKEэто и подходит для этого случая, можно использовать более универсальное решение instr, которое не требует экранирования символов в строке поиска. Примечание: instrдоступно начиная с Sqlite 3.7.15 .

SELECT *
  FROM TABLE  
 WHERE instr(column, 'cats') > 0;

Также имейте в виду, что LIKEрегистр не учитывается , а instrрегистр - чувствителен .


13
Это означает, что ваша minSdkVersion должна быть 21 (5.0-Lollipop)
Максим Тураев

1
@WilliamEntriken В моем собственном тесте instr(...)он немного быстрее (0,32 с против 0,34 с). Вы можете использовать .timer onв SQLite для измерения времени выполнения.
Arnie97 05
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.