Рядок SQLite містить інший рядковий запит


111

Як це зробити?

Наприклад, якщо мій стовпець "Кішки, собаки, птахи", і я хочу отримати будь-які рядки, де стовпець містить котів?


3
відредагуйте своє запитання набором зразкових даних. Важко визначити, що саме ви просите.
p.campbell

Щасливого 100-го голосу.
єпископ

Відповіді:


195

Використовуючи LIKE:

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

4
Майте на увазі, що це не підходить, коли рядок, яку ви шукаєте, є змінною або містить спеціальний символ, наприклад %.
Сем

10
якщо "коти" - це поле з іншої таблиці, ви можете використовувати '%'||table2.field||'%'як подібні критерії
Stéphane Ch.

96

Незважаючи на те, що LIKEце підходить для цього випадку, більш загальним рішенням є використання instr, яке не вимагає, щоб символи в рядку пошуку були уникнути. Примітка: instrдоступний починаючи з Sqlite 3.7.15 .

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

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


13
Це означає, що вашому minSdkVersion має бути 21 (5,0-льодяник)
Максим Тураєв

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