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

111

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

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

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

Ответы:

196

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

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive
OMG Пони
источник
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