SQL - SQL Any Match (LIKE)

 
Vista:

SQL Any Match (LIKE)

Publicado por Jose (4 intervenciones) el 15/09/2010 17:46:09
Hola a todos, espero estén muy bien. Mi pregunta es la siguiente:
Necesito una consulta SQL que me haga match con cualquier palabra en un string especifico. Ejemplo: Tengo una Base de Datos con una tabla llamada notificaciones y en él tengo un campo llamado empresas con:
Comision Nacional de Electricidad (CNE)
Bimbo de Costa Rica
Costa Nostra del Peru
Etc...Etc...

Entonces en un textbox si yo escribo una frase como: "Comision de Costa Rica" me de como resultado las tres empresas porque "Comision" da match con la primer empresa, "Costa" con la segunda y tercer empresa y "Rica" con la segunda.

O sea es una busqueda de cualquier palabra en un textbox....Pero no tengo la menor idea como hacerla.

Alguien sabe??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:SQL Any Match (LIKE)

Publicado por Leonardo Josué (1173 intervenciones) el 20/09/2010 16:13:37
Hola José, la mayoría de los Motores de BD contienen herramientas para diseñar este tipo de consultas, te recomiendo que utilices en algún buscador (google, yahoo, etc) y busques "Consultas de búsqueda de texto" para ver algunos ejemplos. No mencionas qué manejador de BD estás utilizando, pero por ejemplo en MySQL sería con MATCH(), en SQL Server sería utilizando CONTAINS y FREETEXT

Ahora bien, otra opción, aunque no muy recomendable es utilizar el operador LIKE para hacer tus búsquedas, separando cada una de las palabras de tu frase, de tal manera que quede más o menos así:

SELECT * FROM notificaciones WHERE
empresa like '%Comision%' or
empresa like '%de%' or
empresa like '%Costa%' or
empresa like '%Rica%'

En este caso tienes que tener en cuenta algunas concideraciones:

1. Convertir a mayúsculas o minúsculas el contenido del texto y el contenido de tu tabla, Comision != COMISION != comision
2. Cuidado con el uso de acentos: comisión != comisión
3. Faltas de ortografía: Comicion, Comizion, Rika etc.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Any Match (LIKE)

Publicado por Jose (4 intervenciones) el 20/09/2010 18:50:36
Muchas gracias por la pronta respuesta mi amigo...Yo utilizo MS SQL Server como base de datos y programo con vb.net 2010.
Traté de utilizar Freetext pero me generó este error:
Cannot use a CONTAINS or FREETEXT predicate on table or indexed view because it is not full-text indexed

Sabes que como corregirlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:SQL Any Match (LIKE)

Publicado por Leonardo Josué (1173 intervenciones) el 20/09/2010 19:32:20
Hola de Nuevo José, olvidé comentarte que para poder utilizar este tipo de búsquedas tienes que trabajar con Indices de Texto Completos. Tengo que reconocer que hace un buen tiempo que no he trabajado con estos, pero puedes checar algo de documentación para ver si puedes convertir tu tabla en un catálogo de este tipo.

Te dejo algunas ligas para que le des un vistazo

http://msdn.microsoft.com/es-es/library/aa337082.aspx

http://msdn.microsoft.com/es-es/library/ms187317.aspx

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Any Match (LIKE)

Publicado por Jose (4 intervenciones) el 20/09/2010 19:33:53
Correcto, busqué un poco y encontré como indexar las tablas y me funciona bastante bien !! Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Any Match (LIKE)

Publicado por Jose (4 intervenciones) el 20/09/2010 21:23:41
Hola de nuevo Leonardo, vieras que estoy utilizando Freetext y me funciona bastante bastante bien y me gusta los resultados que me da...
Sin embargo, son muchos y necesito filtrarlos un poco más. Con Freetext se puede especificar que no busque palabras en especifico como por ejemplo "de", "para", "la", etc??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:SQL Any Match (LIKE)

Publicado por Leonardo Josué (1173 intervenciones) el 20/09/2010 22:44:40
Hola de nuevo José, creo que lo que tienes hacer es generar una lista de palabras irrelevantes y asociarlo a tu catalogo al momento de hacer la indexación. te dejo algunas ligas donde está la información de cómo generar esta lista de palabra, espero que te pueda servir de algo

http://technet.microsoft.com/es-es/library/ms142551(SQL.100).aspx

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar