Ciąg SQLite zawiera inne zapytanie łańcuchowe


111

Jak mam to zrobic?

Na przykład, jeśli moja kolumna to „koty, psy, ptaki” i chcę uzyskać wiersze, w których kolumna zawiera koty?


3
edytuj swoje pytanie za pomocą zestawu przykładowych danych. Trudno dokładnie określić, o co prosisz.
p.campbell

Szczęśliwego setnego głosowania pozytywnego.
biskup

Odpowiedzi:


196

Korzystanie LIKE:

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

4
Pamiętaj, że nie jest to odpowiednie, gdy szukany ciąg jest zmienny lub zawiera znak specjalny, taki jak %.
Sam

10
jeśli „koty” to pole z innej tabeli, możesz użyć '%'||table2.field||'%'podobnych kryteriów
Stéphane Ch.

96

Chociaż LIKEjest to odpowiednie w tym przypadku, bardziej ogólnym rozwiązaniem jest użycie instr, które nie wymaga znaków ucieczki w ciągu wyszukiwania. Uwaga: instrjest dostępny od Sqlite 3.7.15 .

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

Należy również pamiętać, że LIKEwielkość liter nieinstr jest rozróżniana , natomiast wielkość liter jest rozróżniana .


13
Co oznacza, że ​​Twoja minSdkVersion powinna wynosić 21 (5.0-Lollipop)
Maksim Turaev

1
@WilliamEntriken W moim własnym teście instr(...)jest trochę szybszy (0.32s vs 0.34s). Możesz użyć .timer onw SQLite do pomiaru czasu wykonania.
Arnie97
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.