SQLite-Zeichenfolge enthält andere Zeichenfolgenabfrage

111

Wie mache ich das?

Wenn meine Spalte beispielsweise "Katzen, Hunde, Vögel" lautet und ich Zeilen abrufen möchte, in denen die Spalte Katzen enthält?

Joren
quelle
3
Bearbeiten Sie Ihre Frage mit einer Reihe von Beispieldaten. Es ist schwer genau zu bestimmen, wonach Sie fragen.
p.campbell
Alles Gute zum 100. Up-Vote.
Bischof

Antworten:

195

Verwenden von LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive
OMG Ponys
quelle
4
Beachten Sie, dass dies nicht geeignet ist, wenn die gesuchte Zeichenfolge variabel ist oder ein Sonderzeichen wie z %.
Sam
10
Wenn "Katzen" ein Feld aus einer anderen Tabelle ist, können Sie '%'||table2.field||'%'als ähnliche Kriterien verwenden
Stéphane Ch.
96

Während LIKEdies für diesen Fall geeignet ist, wird eine allgemeinere Lösung verwendet instr, bei der keine Zeichen in der Suchzeichenfolge maskiert werden müssen. Hinweis: instrist ab Sqlite 3.7.15 verfügbar .

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

LIKEBeachten Sie auch, dass zwischen Groß- und Kleinschreibung unterschieden wird , während zwischen instrGroß- und Kleinschreibung unterschieden wird .

Sam
quelle
13
Was bedeutet, dass Ihre minSdkVersion 21 (5.0-Lollipop) sein sollte
Maksim Turaev
1
@ WilliamEntriken In meinem eigenen Test instr(...)ist es etwas schneller (0,32s gegenüber 0,34s). Sie können .timer onin SQLite die Ausführungszeit messen.
Arnie97