La cadena SQLite contiene otra consulta de cadena

111

¿Cómo hago esto?

Por ejemplo, si mi columna es "gatos, perros, pájaros" y quiero obtener filas en las que la columna contenga gatos.

Joren
fuente
3
edite su pregunta con un conjunto de datos de muestra. Es difícil determinar exactamente lo que está pidiendo.
p
Feliz 100a votación a favor.
obispo

Respuestas:

195

Usando LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive
Ponis dios mio
fuente
4
Tenga en cuenta que esto no es adecuado cuando la cadena que está buscando es variable o contiene un carácter especial como %.
Sam
10
si "gatos" es un campo de otra tabla, puede utilizar '%'||table2.field||'%'como criterio similar
Stéphane Cap.
96

Si bien LIKEes adecuado para este caso, se usa una solución de propósito más general instr, que no requiere que se escapen los caracteres en la cadena de búsqueda. Nota: instrestá disponible a partir de Sqlite 3.7.15 .

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

Además, tenga en cuenta que LIKEdistingue entre mayúsculas y minúsculas , mientras que instrdistingue entre mayúsculas y sensible .

Sam
fuente
13
Lo que significa que su minSdkVersion debería ser 21 (5.0-Lollipop)
Maksim Turaev
1
@WilliamEntriken En mi propia prueba, instr(...)es un poco más rápido (0.32s vs 0.34s). Puede usar .timer onen SQLite para medir el tiempo de ejecución.
Arnie97