String SQLite berisi kueri string lain

111

Bagaimana saya melakukan ini?

Misalnya, jika kolom saya adalah "kucing, anjing, burung" dan saya ingin mendapatkan baris di mana kolom berisi kucing?

Joren
sumber
3
edit pertanyaan Anda dengan sekumpulan contoh data. Sulit untuk menentukan dengan tepat apa yang Anda minta.
Campbell
Selamat memilih ke-100.
uskup

Jawaban:

195

Menggunakan LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive
OMG Ponies
sumber
4
Perlu diingat bahwa ini tidak cocok jika string yang Anda cari adalah variabel atau berisi karakter khusus seperti %.
Sam
10
jika "kucing" adalah bidang dari tabel lain, Anda dapat menggunakan '%'||table2.field||'%'kriteria sejenis
Stéphane Ch.
96

Meskipun LIKEcocok untuk kasus ini, solusi tujuan yang lebih umum adalah menggunakan instr, yang tidak memerlukan karakter dalam string pencarian untuk di-escape. Catatan: instrtersedia mulai dari Sqlite 3.7.15 .

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

Juga, perlu diingat bahwa LIKEadalah kasus- sensitif , sedangkan instradalah case sensitif .

Sam
sumber
13
Yang berarti bahwa minSdkVersion Anda harus 21 (5.0-Lollipop)
Maksim Turaev
1
@WilliamEntriken Dalam pengujian saya sendiri, instr(...)ini sedikit lebih cepat (0,32 detik vs 0,34). Anda dapat menggunakan .timer onSQLite untuk mengukur waktu eksekusi.
Arnie97