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?


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

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 .


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.