LIKE de SQL para un campo de una tabla

1,383 views
Skip to first unread message

edgar suarez kummers

unread,
Jan 6, 2015, 7:56:16 PM1/6/15
to publice...@googlegroups.com
Buenas Estimados Foreros y Foxeros:
 
 
 
En el Link de arriba figuran ejemplos de LIKE en cláusulas SQL pero solamente para String.
 
Pregunta, ¿ Cómo se hace cuando luego de un LIKE debe ir un campo completo de una tabla con miles de registros ?
 
Microsoft no aclara esto de plano, o sea decir:
 
LIKE sirve tanto en constantes cuanto en variables, ambas STRING
 
Igual estoy apuntándole a un castillo en el aire.
 
Gracias anticipadas si saben del tema y me pueden instruir.
 
El Query me funciona pero arroja una tabla en blanco, aunque desde luego ambas tablas tienen algunos datos donde algún dato de la segunda tabla está contenido en la primera tabla.
 
Obviamente no utilizo comodines, porque se trata de campos, además no sabría como escribirlos en variables. 
 
Saludos
 

 

Víctor Hugo Espínola Domínguez

unread,
Jan 6, 2015, 8:44:41 PM1/6/15
to publice...@googlegroups.com
Hola Edgar

Puedes dar un ejemplo del filtro que quieres aplicar?

Saludos,
Víctor.
Lambaré - Paraguay.

mapner

unread,
Jan 6, 2015, 8:50:55 PM1/6/15
to publice...@googlegroups.com
El operador LIKE trabaja solo con campos string (character, varchar y hasta memo). Si tienes tablas con gran cantidad de registros el uso de LIKE puede tardar ya que no usa índices, igualmente la perfomance depende del motor de datos y la computadora donde corras la búsqueda.

Saludos

edgar suarez kummers

unread,
Jan 6, 2015, 8:52:55 PM1/6/15
to publice...@googlegroups.com
Buenas Victor, he visto que eres un experto en SQL Query:
 
Tengo ya el siguiente código:
 
Son dos tablas:
 
La tabla correos.dbf tiene miles de correos electrónicos.
 
La tabla laletra.dbf tiene pocos miles de apellidos.
 
Lo que pretendo es que si encuentra dentro de un correo un apellido entonces lo incluya el correo dentro de la tabla nueva mentira.dbf
 
Gracias por tu gentileza.
 

Set Default To (JustPath(Sys(16)))

CLOSE TABLES all

IF FILE('mentira.dbf') then

DELETE FILE mentira.dbf

ENDIF

SELECT ALL TAlias1.correos, TAlias2.letras;

FROM correos.dbf TAlias1, laletra.dbf TAlias2 ;

WHERE TAlias1.correos LIKE TAlias2.letras ;

INTO TABLE mentira.dbf

BROWSE

CLOSE TABLES all

edgar suarez kummers

unread,
Jan 6, 2015, 8:56:00 PM1/6/15
to publice...@googlegroups.com
Gracias Mapner:
 
Microsoft no escribe en forma explícita que no se deben usar variables, que es lo que presumo que está ocurriendo.
 
Nunca les alcanza a llegar a la meta porque les falta un centavo para el dólar.

mapner

unread,
Jan 6, 2015, 9:30:33 PM1/6/15
to publice...@googlegroups.com
Edgar, no entiendo eso de que no se puede usar variables.
Si estas utilizando cursores locales puedes hacer
m.cExp = 'JOSE'
SELECT * FROM CLIENTES WHERE NOMBRE LIKE '%'+m.cExp+'%'

A su vez recuerda que el operador LIKE tiene razón de ser si lo útilizas con comodines, sino es como usar el signo igual.





edgar suarez kummers

unread,
Jan 6, 2015, 9:43:10 PM1/6/15
to publice...@googlegroups.com
Gracias Mapner, deberían incluirte en la nómina de Microsoft, para redactar mejor las cosas. Te incluyo una PDF hecha por un árabe que es clarísima, pero tampoco le atinó a LIKE usando variables. Voy a ensayar tu código
 
Gracias de nuevo
SQL Command.pdf

edgar suarez kummers

unread,
Jan 6, 2015, 9:58:55 PM1/6/15
to publice...@googlegroups.com
Estimado Mapner:
 
Lo he hecho así, pero sale una tabla en blanco, aunque las dos tablas tienen por ejemplo el apellido GMAIL, o sea la de los apellidos (laletra.dbf con campo 'letras') tiene GMAIL como apellido y la de los correos tiene direcciones de correos que son de GMAIL. Tabla correos.dbf y campo 'correos'
 
O sea la tabla mentira.dbf me sale sin registros.
 
Demora varios minutos haciendo el Query. El código lo hace, pero te repito sale en blanco, sin registros.
 

Set Default To (JustPath(Sys(16)))

CLOSE TABLES all

IF FILE('mentira.dbf') then

DELETE FILE mentira.dbf

ENDIF

SELECT ALL TAlias1.correos, TAlias2.letras;

FROM correos.dbf TAlias1, laletra.dbf TAlias2 ;

WHERE TAlias1.correos LIKE '%' + TAlias2.letras + '%';

INTO TABLE mentira.dbf

BROWSE

CLOSE TABLES all

Víctor Hugo Espínola Domínguez

unread,
Jan 6, 2015, 11:23:53 PM1/6/15
to publice...@googlegroups.com
Hola Edgar

Prueba esto:

WHERE TAlias1.correos LIKE '%' + TRIM(TAlias2.letras) + '%';

o

WHERE TRIM(TAlias2.letras) $ TAlias1.correos ;


Saludos,
Víctor.
Lambaré - Paraguay.

edgar suarez kummers

unread,
Jan 7, 2015, 5:30:40 AM1/7/15
to publice...@googlegroups.com, Víctor Hugo Espínola Domínguez, mpis...@gmail.com
Estimado Victor:
 
CHAPEAU para ti. Eres un gran maestro del SQL y del Visual FoxPro.
 
Funcionó de maravilla.
 
Igualmente gracias a Mapner por aclararme mi duda acerca de que LIKE sí funciona con variables, algo que en el PDF de un profesor árabe no estaba explícito y que te adjunto, así como tampoco está explícito en páginas de Microsoft consultadas.
 
Mil gracias de nuevo. 
 
 
SQL Command.pdf

mpulla

unread,
Jan 7, 2015, 5:12:46 PM1/7/15
to publice...@googlegroups.com, vich...@gmail.com, mpis...@gmail.com
Hola Edgar.

Consíguete otro manual el que tienes está muy viejo...

Te recomiendo este libro "Microsoft SQL Server 2012 T-SQL Fundls. - I. Ben-Gan" muy bueno.

Saludos.
Mauricio

edgar suarez kummers

unread,
Jan 7, 2015, 5:41:49 PM1/7/15
to publice...@googlegroups.com
Gracias Mauricio, voy a tener en cuenta tu recomendación. Tienes razón.
 
Saludos de nuevo agradecido.
 
Reply all
Reply to author
Forward
0 new messages