Busqueda sobre campo varchar

26/09/2005 - 13:22 por Asier | Informe spam
hola grupo:

Tengo una tabla con un campo varchar 255. El usuario tiene un criterio
de búsqueda en pantalla sobre este campo. La dificultad es que si quiere
buscar por 2 palabras tengo que hacerlo independientemente del orden en el
que aparezcan en el campo, es decir, si el usuario escribe: palabra1
palabra2, debería buscar like '%palabra1%palabra2%' ó
'%palabra2%palabra1%'. Pueden ser 3 palabras, 4, etc.

Hay alguna función de Sql Server que lo haga o se os ocurre alguna forma
de hacerlo.

Saludos,

Asier

Preguntas similare

Leer las respuestas

#1 Maxi
26/09/2005 - 13:55 | Informe spam
Hola, podrias pasar la cadena como bien dices o bien usar Or en la consulta


Salu2
Maxi


"Asier" escribió en el mensaje
news:
hola grupo:

Tengo una tabla con un campo varchar 255. El usuario tiene un criterio
de búsqueda en pantalla sobre este campo. La dificultad es que si quiere
buscar por 2 palabras tengo que hacerlo independientemente del orden en el
que aparezcan en el campo, es decir, si el usuario escribe: palabra1
palabra2, debería buscar like '%palabra1%palabra2%' ó
'%palabra2%palabra1%'. Pueden ser 3 palabras, 4, etc.

Hay alguna función de Sql Server que lo haga o se os ocurre alguna
forma
de hacerlo.

Saludos,

Asier



Respuesta Responder a este mensaje
#2 Alejandro Mesa
26/09/2005 - 15:34 | Informe spam
Asier,

de búsqueda en pantalla sobre este campo. La dificultad es que si quiere
buscar por 2 palabras tengo que hacerlo independientemente del orden en el
que aparezcan en el campo, es decir, si el usuario escribe: palabra1
palabra2, debería buscar like '%palabra1%palabra2%' ó
'%palabra2%palabra1%'.



Para esto puedes usar el operador "AND".

select c1, c2, ..., cn
from t1
where c2 like '%palabra1%' and c2 like '%palabra2%'

En el caso de que tengas que hacer la busqueda por multiples palabras, se me
ocurre que pudieras probar pasando las palabras en una cadena separadas por
coma o un archivo xml (el que mejor resultado te de) y usar una funcion que
devuelva una tabla a partir de la cadena de entrada y que apliques la
división relacional.

Ejemplo:

use northwind
go

select
identity(int, 1, 1) as Number
into
Numbers
from
sysobjects as a cross join sysobjects as b
go

CREATE FUNCTION inline_split_me (@param varchar(7998)) RETURNS TABLE AS
RETURN(
SELECT
substring(',' + @param + ',', Number + 1, charindex(',', ',' + @param +
',', Number + 1) - Number - 1) AS Value
FROM
Numbers
WHERE
Number <= len(',' + @param + ',') - 1 AND substring(',' + @param + ',',
Number, 1) = ',')
go

select
p.*
from
dbo.products as p
inner join
(
select
productid
from
dbo.products as p
inner join
dbo.inline_split_me('Sir,Rodney''s') as a
on p.productname like '%' + a.value + '%'
group by
productid
having
count(*) = (select count(*) from dbo.inline_split_me('Sir,Rodney''s'))
) as t(productid)
on p.productid = t.productid
go

drop function inline_split_me
go

drop table Numbers
go


Why should I consider using an auxiliary numbers table?
http://www.aspfaq.com/show.asp?id%16

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html

Relational Division
http://www.dbazine.com/ofinterest/o...20division


AMB

"Asier" wrote:

hola grupo:

Tengo una tabla con un campo varchar 255. El usuario tiene un criterio
de búsqueda en pantalla sobre este campo. La dificultad es que si quiere
buscar por 2 palabras tengo que hacerlo independientemente del orden en el
que aparezcan en el campo, es decir, si el usuario escribe: palabra1
palabra2, debería buscar like '%palabra1%palabra2%' ó
'%palabra2%palabra1%'. Pueden ser 3 palabras, 4, etc.

Hay alguna función de Sql Server que lo haga o se os ocurre alguna forma
de hacerlo.

Saludos,

Asier




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida