La chaîne SQLite contient une autre requête de chaîne

111

Comment puis-je faire cela?

Par exemple, si ma colonne est "chats, chiens, oiseaux" et que je veux obtenir des lignes où la colonne contient des chats?

Joren
la source
3
modifiez votre question avec un ensemble d'exemples de données. Il est difficile de déterminer exactement ce que vous demandez.
p.campbell
Joyeux 100e vote positif.
évêque

Réponses:

195

En utilisant LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive
Poneys OMG
la source
4
Gardez à l'esprit que cela ne convient pas lorsque la chaîne que vous recherchez est variable ou contient un caractère spécial tel que %.
Sam
10
si "chats" est un champ d'une autre table, vous pouvez utiliser '%'||table2.field||'%'comme critère similaire
Stéphane Ch.
96

Bien que cela LIKEconvienne à ce cas, une solution plus générale consiste à utiliser instr, qui ne nécessite pas d'échapper les caractères de la chaîne de recherche. Remarque: instrest disponible à partir de Sqlite 3.7.15 .

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

De plus, gardez à l' esprit que LIKEest la casse insensible , alors instrest la casse sensible .

Sam
la source
13
Ce qui signifie que votre minSdkVersion devrait être 21 (5.0-Lollipop)
Maksim Turaev
1
@WilliamEntriken Dans mon propre test, instr(...)c'est un peu plus rapide (0.32s vs 0.34s). Vous pouvez utiliser .timer ondans SQLite pour mesurer le temps d'exécution.
Arnie97