Foros Club Delphi

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

santiago14 13-06-2008 20:12:38

XOR en consulta SQL
 
Buenas, estoy haciendo unas consulta y en las condiciones necesito aplicar el operador lógico XOR pero no me lo acepta. Estoy en Firebird 1.5, quisiera saber la manera de poner este operador, gracias.

Código SQL [-]
Select f.cod_pago, o.nro_obra, o.nombre_obra as Obra,
c.nombre_consig as Proveedor, f.fch_pago as Fecha,
lpad(f.pto_vta_pago,4,'0') || ' - ' || lpad(f.nro_pago,8,'0') as nrorecibo,
f.monto_pago as Monto,
CASE WHEN f.cod_consig IS NULL THEN 'GASTOS VARIOS'
ELSE c.tipo_consig END AS tipo
From (pagos f LEFT OUTER JOIN consignatarios c ON c.cod_consig = f.cod_consig), obras o
Where o.nro_obra = f.nro_obra
and o.nombre_obra LIKE :nombreObra
and (c.nombre_consig LIKE '%'  || :nombreProveedor || '%' OR /*aqui debería ser XOR y no OR*/ c.nombre_consig is null)

TOPX 13-06-2008 21:57:00

Buenas santiago14,

"The exclusive OR (which evaluates to true if any single condition is true but false if all conditions are true) is not supported."
Pág. 399. The Firebird Book.

Entonces, como en FB no se tiene el operador XOR, podría realizar la operación equivalente:

Código SQL [-]
and (
  (c.nombre_consig LIKE '%'||:nombreProveedor||'%' AND c.nombre_consig IS NOT NULL) OR
  (c.nombre_consig NOT LIKE '%'||:nombreProveedor||'%' AND c.nombre_consig IS NULL)
)

O también, si lo prefiere, puede construir/descargar una UDF para ello.

--
"constructive mind, destructive thoughts"

santiago14 13-06-2008 22:11:12

Xor...
 
Muchas gracias compañero.


La franja horaria es GMT +2. Ahora son las 22:35:14.

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