Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   like (https://www.clubdelphi.com/foros/showthread.php?t=30449)

Migue Rguez 06-04-2006 17:01:48

like
 
Hola Foro, sabemos q para buscar una cadena dentro de otra utilizamos LIKE de forma q

Código SQL [-]
WHERE CAMPO1 LIKE '%cadena%'

buscamos la subcadena 'cadena' en CAMPO1 pero... cómo hacer si queremos hacerlo al reves? Buscar el valor CAMPO1 en la cadena q le pasamos a LIKE.

Espero haber sido claro y q alguien tenga una respuesta.

Saludos!

Lepe 06-04-2006 18:28:34

¿Qué estas intentando hacer? Porque dicho así... no lo pillo.

Saludos

vtdeleon 07-04-2006 01:08:10

Bueno.

Lo qu eentendi fue que si tienes una cadena (Ej:) 'gato'. que se haga una busqueda de cuales campos (Fields) tienen en su contenido (o registros) 'gato'.

Sera??:confused: :confused: :confused: :confused:

Saludos.

Lepe 07-04-2006 11:13:24

Yo entendí más o menos lo mismo.... pero... Si tengo 3 campos y resulta que el dato lo meto aleatoriamente en el campo1, campo2 o campo3, ¿de qué me sirve tener una estructura ordenada de bases de datos? Digo yo... para algo está un campo Observaciones donde meter toda esa morralla y por lo menos, ya sé donde tengo que buscar.

En el caso de hacer una pantalla de búsqueda genérica para todo tipo de Dataset, pues habría que mantener un orden, es decir, el primer campo de búsqueda en la interfaz lo asocio conceptualmente con el campo1 y así busco en ese campo nada más.

Saludos

JOSEA 07-04-2006 16:59:15

Hola a todos:
Supongo yo entendi que si tienes registros del tipo
azul
verde
gris
rojo

quienes hacer un like para que te salgan por ejemplo solo azul y rojo

partiendo de mi supuesto prueba esto
Código:

  select * from tabla where 'azul rojo' like '%'+campo+'%'
Espero que te sirva.

Migue Rguez 08-04-2006 09:31:31

Buenas de nuevo, gracias por vuestro aporte pero creo q yo debí haberme explicado mejor con un caso practico...

Supongamos q en CLAVES tengo una seria de adjetivos tales como
frio,
calor,
interesante,
aburrido,
intenso,
suave...
etc.. etc...

y el usuario introduce una frase en un TEdit tal como
'El frio era tan intenso q dolía la cara'.

Pues bien, el cometido sería q apartir de la frase introducida podamos tener como resultado los registros frio e intenso.

La solución q me da JOSEA ya la probé en su momento puesto q fue lo más lógico, pero ésto no da ningun resultado ni con like '%'+campo+'%' ni tampoco con like '%'||campo||'%'

Ahora mismo, para salir del paso, lo tengo solucionado con la funcion Pos

While not sql1.EOF do
begin
If Pos(sql1.FieldByNameAsString('CLAVES'), Edit1.Text) > 0 then
ShowMessage(' --- CADENA ENCONTRADA --- ');
sql1.Next;
end;

Pero a medida q el campo 'CLAVES' vaya teniendo más registros esto puede hacerse eterno.

Saludos y gracias!

Lepe 08-04-2006 11:36:00

La forma que se me ocurre tampoco es eficiente, pero en fin...

Código SQL [-]
 select * from tabla
where campo in ('El','frío','era','tan','intenso','que','dolia','cara')

El servidor puede volverse loco cuando sea un párrafo entero :D pero será cuestion de enviarle peticiones con frases cortas.

Hacerlo es muy fácil, solo necesitas una rutina que al pasarle una frase, detecte el espacio en blanco y use QuotedStr para añadirle las comillas y le añada las comas.

A ver si alguien aporta un método más eficiente.

Saludos

Migue Rguez 08-04-2006 16:39:32

Gracias Lepe!

Muy ingeniosa la propuesta e incluso la veo factible pues en mi caso, la cadena a pasar dudo q contenga más de 8 o 10 palabras.

No obstante, no me saca del aprieto esta forma ya q los registros del campo CLAVES pueden contener mas de una palabra. De todas formas gracias ya q estamos aprendiendo todos un poco.

Saludos

FOURIER 12-04-2006 13:35:08

Espero te sirva
 
para el gestor
Código Delphi [-]
select * from tabla1 where 'El frio era tan intenso q dolía la cara'  like '*'+Campo+'*';

para delphi
Código Delphi [-]
Query.SQL.Text:='select * from tabla1 where '+''''+'El frio era tan intenso q dolía la cara'+''''+'  like '+''''+'%'+''''+'+'+Campo+'+'+''''+'%'+'''';
Query.Open

Puesto de otra manera

Código Delphi [-]
Query.SQL.Text:='select * from tabla1 where '+''''+ORACION.TEXT+''''+'  like '+''''+'%'+''''+'+'+Campo+'+'+''''+'%'+'''';
Query.Open


La franja horaria es GMT +2. Ahora son las 14:53:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi