2011-08-23 9 views
11

Con SQL, me gustaría detectar si un cierto bit está activado con un tipo de columna entera (MySQL)?SQL - Integer Type - Detect bit

¿Cómo podría hacerlo?

Básicamente, quiero detectar si un bit está activado, si está activado, luego ignorarlo.

estoy usando algo como esto ahora:

WHERE (column & 2) != 2 
+0

¿Estás hablando de una columna de bits o una columna de enteros? ¿Qué quieres decir con? Por favor reformula la pregunta. – Caimen

+0

¿Qué base de datos está usando? – Bohemian

+0

Los indicadores de bits están bien para las enumeraciones en 3GL pero un 4GL como SQL funciona mejor con datos relacionales, es decir, relaciones de tuplas con atributos. – onedaywhen

Respuesta

13

decir que eres la comprobación de el tercero poco después ...

SELECT bits & 8 = 8 FROM table; 

esto devuelve un binario (1 o 0) de si el bit en cuestión (en este caso el tercero) está encendido o apagado para cada fila de los 'bits' de la columna.

usando 2^x para el bit de orden x en lugar de 8.

por ejemplo, para comprobar el quinto bit usaríamos 2^5 = 32

SELECT bits & 32 = 32 FROM table; 

Sin embargo, esto es innecesariamente complicado. Simplemente use valores booleanos en varias columnas y facilitará las cosas.

+0

¿Qué es exactamente SELECT bits & 8 = 8 FROM tabla; ¿obra? Estamos seleccionando bits y 8 = 8 para una columna? – RoR

+0

La idea básica es que el operador '&' determina los bits que están 'on' en sus dos argumentos. Entonces (bits & 8 = 8) determina si 8 (que es solo el tercer bit) y la columna 'bits' tiene bits correspondientes. El resultado de la consulta en conjunto es una serie de resultados binarios para si el tercer bit está activado. – PyKing

2

SQL es compatible con los operadores de bits estándar:

DECLARE @BitMask INT 
SET @BitMask = 34 

SELECT 
    @BitMask & 32, -- Returns 32, ON 
    @BitMask & 16 -- Returns 0, OFF 
0

Usted debe etiquetar la cuestión de la plataforma de base de datos que está utilizando.

Si esto es SQL Server 2008, puede utilizar operadores de bits (en concreto a nivel de bits o igual a) comparar a un número entero cuyo bits se establecen en el patrón que está interesado en las pruebas para: http://msdn.microsoft.com/en-us/library/cc627409.aspx

Tenga en cuenta que mediante empaque enteros de esta manera, es probable que impida el uso de cualquier índice en esas columnas.

0

En TSQL, 1 = verdadero, 0 = falso.
En MS Access, -1 = verdadero, 0 = falso.
...
Quizás alguien pueda completar los otros dialectos.

Si está interpretando un poco en una capa de aplicación, debe ser capaz de utilizar una función de conversión (por ejemplo, en VB se podría decir IF convert.toboolean(myValue) THEN... interpretar verdadero o falso.

1

para MySQL, se puede utilizar el bit a bit AND operador & con un bit de máscara

Por ejemplo, para obtener un valor lógico true si el bit 2 (contando desde 0) se establece para column1, utilice esto:

where (column1 & 4) = 4 

esto funcionará para múltiples comprobaciones de bits, por ejemplo, para comprobar que tanto los bits 0 y 2 se establecen:

where (column1 & 5) = 5