String SQLite contém outra consulta de string

111

Como eu faço isso?

Por exemplo, se minha coluna for "gatos, cachorros, pássaros" e eu quiser obter alguma linha em que a coluna contenha gatos?

Joren
fonte
3
edite sua pergunta com um conjunto de dados de amostra. É difícil determinar exatamente o que você está pedindo.
p.campbell
Feliz 100º voto positivo.
bispo

Respostas:

195

Usando LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive
Pôneis OMG
fonte
4
Lembre-se de que isso não é adequado quando a string que você está procurando é variável ou contém um caractere especial como %.
Sam
10
se "gatos" é um campo de outra tabela, você pode usar '%'||table2.field||'%'como o mesmo critério
Stéphane Ch.
96

Embora LIKEseja adequado para este caso, uma solução de propósito mais geral é usar instr, o que não requer que caracteres na string de pesquisa sejam escapados. Nota: instrestá disponível a partir do Sqlite 3.7.15 .

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

Além disso, mantenha em mente que LIKEé caso- insensível , enquanto que instrdiferencia maiúsculas de minúsculas .

Sam
fonte
13
O que significa que sua minSdkVersion deve ser 21 (5.0-Lollipop)
Maksim Turaev
1
@WilliamEntriken Em meu próprio teste, instr(...)é um pouco mais rápido (0,32s vs 0,34s). Você pode usar .timer onno SQLite para medir o tempo de execução.
Arnie97