Coincidencia exacta en Firebird

129 views
Skip to first unread message

Ultraton500

unread,
Oct 21, 2014, 1:29:03 PM10/21/14
to publice...@googlegroups.com
Hola a todos, para que una coincidencia de cadenas en SQL sea exacta, en VFP se debe usar doble igual ( == ) pero necesito asegurarme de que en Firebird un solo signo de igual ( = ) cumple la misma función porque aunque creo que es así no he encontrado nada que me lo confirme..

Muchas gracias desde ya.
Saludos,
Javier.

Irwin Rodriguez

unread,
Oct 21, 2014, 2:39:21 PM10/21/14
to publice...@googlegroups.com
Si es así.

IF A = B THEN ...

Saludos!
--
Ing. Irwin Rodríguez
 
Consultor Informático
 
"Las ideas son fuerzas intangibles, pero tienen más poder que el cerebro físico de donde nacen. Tienen el poder de seguir viviendo, aún después de que el cerebro que las ha creado haya regresado al polvo"

NOTA: La información mostrada en este mensaje es de caracter Confidencial y está dirigida unicamente a los contactos señalados en el encabezado; si el lector de este correo no es el destinatario del mismo, se le notifica que cualquier copia o distribución queda totalmente prohibida. Si usted ha recibido este mensaje por error, por favor notifique inmediatamente al remitente por este mismo medio y bórrelo de su sistema.

Ultraton500

unread,
Oct 21, 2014, 3:05:03 PM10/21/14
to publice...@googlegroups.com
Gracias por tu respuesta Irwin. Me refiero a las coincidencias en las condiciones de una sentencia SQL. Si en VFP usamos

WHERE campo="P" nos devuelve los registros en donde campo="P"  y también los registros en donde campo="PA", campo="PB", etc.

Para obtener solo los registros en donde campo="P" y no donde campo="Px" hay que escribir WHERE campo=="P".

Por lo que entiendo, en Firebird no se usa el doble igual ( == ) y por eso necesito saber si el simple igual ( = ) de Firebird funcionaría igual que el doble igual en VFP.

Saludos,
Javier.

Irwin Rodriguez

unread,
Oct 21, 2014, 3:46:43 PM10/21/14
to publice...@googlegroups.com
Sí, allí tambien se aplica el mismo concepto.

SELECT CAMPOS FROM TABLA WHERE CAMPO='P' ROWS N

Saludos!

Ultraton500

unread,
Oct 21, 2014, 3:55:23 PM10/21/14
to publice...@googlegroups.com
Espectacular Irwin!! era lo que quería saber.
Muchas gracias por tu ayuda.

Saludos cordiales,
Javier.

HernanCano

unread,
Oct 22, 2014, 11:39:56 AM10/22/14
to publice...@googlegroups.com
Sin embargo, encontré lo sgte:


Espero que se refiera al mismo tema y que esa información te ayude.

Ultraton500

unread,
Oct 23, 2014, 12:14:08 PM10/23/14
to publice...@googlegroups.com
Hola Hernan, gracias como siempre por tu ayuda.
Muy interesante el ejemplo del blog de Walter. En cuanto pueda voy a probar si un SELECT ... WHILE campo LIKE 'A' me devuelve solo los registros en donde el valor del campo es igual a "A" o también los registros donde el valor del campo es igual a "AB", "AC", etc., creería que no pero quiero asegurarme.

Saludos cordiales,
Javier.

alfonsoa...@gmail.com

unread,
Oct 23, 2014, 2:12:42 PM10/23/14
to Lista Google VFP
Errado:
 
SELECT ... WHILE campo LIKE 'A'
 
deberia ser
 
SELECT ... WHERE campo LIKE 'A%'
 
 
Eso no es Firebird, eso es un estandar SQL.
 
 
-------Mensagem original-------



Este email está livre de vírus e malware porque a proteção avast! Antivirus está ativa.


IMSTP22.gif

Ultraton500

unread,
Oct 23, 2014, 3:30:40 PM10/23/14
to publice...@googlegroups.com
Qué tal Alfonso..
si le agrego % con mas razón campo LIKE 'A%' me va a recuperar registros que cumplan con campo='AB', campo='AC', etc. y eso es lo que trato de evitar.
Pero bueno, creo que hasta ahora estamos de acuerdo en que WHILE campo='A' solo recupera registros donde campo='A' y no donde campo='AB', campo='AC', etc..

Saludos,
Javier.

alfonsoa...@gmail.com

unread,
Oct 23, 2014, 4:38:01 PM10/23/14
to Lista Google VFP
ok, mas WHILE no, es WHERE ........
 
 
IMSTP22.gif

HernanCano

unread,
Oct 25, 2014, 1:33:44 AM10/25/14
to publice...@googlegroups.com
Javier:

>>> Pero bueno, creo que hasta ahora estamos de acuerdo en que WHILE campo='A' solo recupera registros donde campo='A' y no donde campo='AB', campo='AC', ......

¿Dijiste WHILE? Hablemos de WHILE ..........

Para que  WHILE campo='A' devuelva la "concidencia exacta", debes hacerlo así: WHILE alltrim(CAMPO)=='A' (con doble igual y con ALLTRIM); de esta forma no devuelve los registros que valgan 'AB', 'AC', etc....

Pero WHILE es en DBFs nativos, no en FireBird ni motores externos.... (como te aclara Alfonso)......... ¿Sigo...?


La contraparte de   WHILE alltrim(CAMPO)=='A'  es WHERE CAMPO LIKE 'A',  mientras que la contraparte de WHILE CAMPO='A' (con SET EXACT OFF y posibles valores AB, AC, etc),  es    WHERE CAMPO LIKE 'A%'     de acuerdo a lo que se desprende del artículo  https://firebird21.wordpress.com/2014/01/20/comparando-strings/.


¿La prueba que hiciste se ajusta a ésto ...? ¿o cómo se está comportando?




El jueves, 23 de octubre de 2014 14:30:40 UTC-5, Ultraton500 escribió:
Qué tal Alfonso..
si le agrego % con mas razón campo LIKE 'A%' me va a recuperar registros que cumplan con campo='AB', campo='AC', etc. y eso es lo que trato de evitar.
Pero bueno, creo que hasta ahora estamos de acuerdo en que WHILE campo='A' solo recupera registros donde campo='A' y no donde campo='AB', campo='AC', etc...

Saludos,
Javier.

Ultraton500

unread,
Oct 25, 2014, 4:23:08 PM10/25/14
to publice...@googlegroups.com
Perdón, el estrés hizo que pusiera WHILE en lugar de WHERE.
Hice las siguientes pruebas sobre la db de ejemplo que trae Firebird (creando primero tres registros con 'A', 'AB' y 'AC' en el campo first_name):

SELECT * FROM employee WHERE first_name='A'                      devuelve un registro donde el campo first_name es igual a 'A'
SELECT * FROM employee WHERE first_name LIKE 'A'               devuelve un registro donde el campo first_name es igual a 'A'
SELECT * FROM employee WHERE first_name='AB'                    devuelve un registro donde el campo first_name es igual a 'AB'
SELECT * FROM employee WHERE first_name LIKE 'AB'             devuelve un registro donde el campo first_name es igual a 'AB'
SELECT * FROM employee WHERE first_name='A    '                  devuelve un registro donde el campo first_name es igual a 'A'
SELECT * FROM employee WHERE first_name LIKE 'A    '           no devuelve registros
SELECT * FROM employee WHERE first_name='    A    '              no devuelve registros
SELECT * FROM employee WHERE first_name LIKE '    A    '       no devuelve registros
SELECT * FROM employee WHERE first_name='    A'                  no devuelve registros
SELECT * FROM employee WHERE first_name LIKE '    A'           no devuelve registros
SELECT * FROM employee WHERE first_name='A%'                   no devuelve registros
SELECT * FROM employee WHERE first_name LIKE 'A%'            devuelve registros donde el campo first_name es igual a 'A', a 'AB',  a 'AC', etc.

Me disculpo nuevamente por la torpeza y les agradezco a los tres por su ayuda y su tiempo.

Saludos cordiales,
Javier.

HernanCano

unread,
Oct 25, 2014, 10:25:36 PM10/25/14
to publice...@googlegroups.com
Entonces..... ¿cuál fue la conclusión?

((me disculpo si incomodo, pero no la veo)))

----- Ultraton escribió: -------

Ultraton500

unread,
Oct 26, 2014, 12:37:46 AM10/26/14
to publice...@googlegroups.com
No hay de qué disculpase Hernan, no incomodas para nada. 
Mi conclusión es que mientras no existan espacios en una comparación puede usarse tanto "=" como "LIKE" (sin "%") pero si existen espacios y quieren ser tenidos en cuenta en una comparación debemos utilizar "LIKE" para una coincidencia estricta.

Saludos cordiales,
Javier.

P.D.: Que no te sorprenda si mi conclusión no es de lo mas acertada porque van a ser las 2 de la mañana y mis neuronas están desde hace rato ya en un estado de somnolencia.

HernanCano

unread,
Oct 26, 2014, 1:12:45 AM10/26/14
to publice...@googlegroups.com
Gracias, chico.
Reply all
Reply to author
Forward
0 new messages