Estoy tratando de buscar en una base de datos Sqlite, con esta condición: quiero encontrar una cadena usando una palabra clave exacta. Déjame explicarte esto . tengo 3 filas de la siguiente manera:

  • resfriarse
  • tengo un gato
  • Ayer se vieron dos gatos en tu casa

Quiero buscar estas filas con la palabra clave "gato" y espero este resultado:

  • tengo un gato

Estoy usando este código SQL hasta ahora:

Select * FROM MyTable WHERE Mycolumn Like '%cat%'

Pero el resultado devuelto son todas estas 3 filas:

  • resfriarse
  • tengo un gato
  • Ayer se vieron dos gatos en tu casa

¿Qué puedo hacer para obtener el resultado esperado?

Gracias de antemano.

1
Mehrdad1373 25 ene. 2015 a las 05:01

2 respuestas

La mejor respuesta

El carácter % en el argumento de una cláusula LIKE coincide con cualquier cadena, incluida la cadena vacía. Desafortunadamente, SQLite no tiene la función REGEXP incorporada (y SQLite de Android no la tiene).

Lo que puede hacer en su lugar es usar FTS (búsqueda de texto completo). Aquí se describe cómo hacerlo: https://www.sqlite.org/fts3.html#section_1_2

Usando su ejemplo, lo configuraría así:

create virtual table textsearch using fts4(content);
insert into textsearch (content) values ('catching cold'), ('i have a cat'), ('two cats was seen in your house yesterday')

Luego, puede hacer una consulta de texto simple con el operador MATCH:

select * from textsearch where content match 'cat';

Si prueba lo anterior en un shell sqlite3, verá que solo devuelve 'tengo un gato'. Hay mucho más que puedes hacer con el operador de partidos, explicado en la página que vinculé arriba.

0
Karakuri 25 ene. 2015 a las 02:28

Puede utilizar una expresión regular con un patrón especial para los límites de las palabras.

Select * FROM MyTable WHERE Mycolumn = 'cat' 

Corregí mi respuesta, creo que debería funcionar.

1
Dom Adams 25 ene. 2015 a las 02:09