![]() |
Hacer un and en una consulta SQL
Amigos, estoy haciendo una aplicación en Delphi 7. Esta aplicación hace uso de varias tablas Paradox. En una de estas tablas, tengo una con un campo de tipo SHORT llamado INFO. Me gustaria hacer una consulta que me seleccionara los registros que al hacerle un and al campo INFO con un valor entero (máscara) me retorne el valor esperado.
Por ejemplo: SELECT * FROM FACTURAS WHERE (INFO AND 8) = 8 Muchas gracias. |
Según creo que pides:
Sino es así explícalo más ampliamente. Un Saludo. |
No amigo, no es tan fácil ni tan obvio, al menos lo veo más complicado. El campo info como ya dije es un valor entero y estoy usando los bits para guardar más de una cosa en un único valor.
Por ejemplo, el bit 7 significa que la factura está cancelada, el 6 que fue impresa, el 5, el 4 y el 3 el tipo de factura, etc. Entonces yo quiero en una consulta seleccionar todas las facturas que no están canceladas (bit 7 = 1) sin importarme el valor que puedan tener los demás bits. Si pudiera en una sentencia SQL hacer lo siguiente:
Estaría recuperando todos los registros (facturas) que el bit 7 del campo INFO lo tienen en 0. Me expliqué mejor esta vez? |
Es que eso en SQL no te va a funcionar al menos en Paradox.
Hubiese sido mejor en el caso de persistir en la idea de guardar en un solo campos tantas cosas utilizar un campo texto de ancho 8, en el que solamente sean válidos los 0 y 1, de esta manera con la función extract te sería fácil hacer lo que quieres. Un Saludo. |
Bueno creo que voy a darme por vencido y probar algo como lo que me dices o sino poner los campos según sean mis necesidades aunque esto uncremente el tamaño de la base de datos.
Quería optimizar el espacio porque esta aplicación es para un PC algo viejito pero bueno no creo que pasando yo tanto trabajo logre mucho. Gracias a todos, byeee |
Oye eso lo estas complicando mas de lo que deberias, normalmente ese tipo de manejos se hace con un campo de estado, ya sea integer o un campo de tipo varchar de un solo caracter, y guardas los estados por ejemplo:
A=activa C=cancelada E=emitida D=Devuelta o los que necesites, y luego con un simple where podrias hace lo que necesitas. Es altamente recomendable que el estado quede independizado del tipo de facturas, y asi facilmente podrias combinar 2 wheres, por ejemplo asumiendo que tipo 1= Contado y 2=Credito podria ser asi: Con eso filtrarias las facturas de contado que fueron impresas. Espero te sirvan estas ideas. Saludos |
Cita:
Explicacion: Todos los numero entre 128 y 255 tienen el bit # 7 con uno(1).;) |
Entiendo más o menos lo que deseas hacer, me parece que son operaciones con bits yo en sql he usado esto
Ejemplo: quizas puedas usar el mismo ampersand pero en sql tuve que usar el valor ascii saludos. |
Y esto se puede hacer en tablas paradox?
Cual es el significado del @? |
Cita:
en el caso de la instrucción dentro de la consulta (ascii(macc.nivel_acceso) & ascii(rol.nivel_acceso), el ampersand hace la operacion and (lógico) a nivel de bits. Saludos. |
| La franja horaria es GMT +2. Ahora son las 10:39:39. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi