2011-08-23 11 views
11

Con SQL, vorrei rilevare se un certo bit è attivo con un tipo di colonna intero (MySQL)?SQL - Tipo intero - Rileva bit

Come dovrei fare questo?

Fondamentalmente, voglio rilevare se un bit è attivo, se è acceso, quindi ignorarlo.

sto usando qualcosa di simile ora:

WHERE (column & 2) != 2 
+0

Stai parlando di un colonna di bit o una colonna intera? Cosa intendi? Si prega di riformulare la domanda. – Caimen

+0

Che database stai usando? – Bohemian

+0

I bit per bit vanno bene per le enumerazioni in 3GL ma un 4GL come SQL funziona meglio con i dati relazionali, cioè le relazioni delle tuple con gli attributi. – onedaywhen

risposta

13

dire che stai controllando per il 3 ° bit poi ...

SELECT bits & 8 = 8 FROM table; 

questo restituisce un binario (1 o 0) per se il bit in questione (in questo caso il terzo) è acceso o spento per ogni riga negli bit 'colonna.

utilizzando 2^x per il xth bit anziché 8.

per esempio, per controllare il bit 5 useremo 2^5 = 32

SELECT bits & 32 = 32 FROM table; 

Tuttavia, questo è inutilmente complicato. Basta usare valori booleani in diverse colonne e renderà le cose molto più semplici.

+0

Che cosa sono esattamente i bit SELECT e 8 = 8 FROM table; facendo? Stiamo selezionando bit e 8 = 8 per una colonna? – RoR

+0

L'idea di base è che l'operatore '&' determini i bit che sono 'on' in entrambi i suoi argomenti. Quindi (bit e 8 = 8) determina se 8 (che è solo il terzo bit) e la colonna 'bit' hanno bit corrispondenti. Il risultato dell'interrogazione nel suo insieme è una serie di risultati binari per se il terzo bit è attivo. – PyKing

2

SQL supporta gli operatori bit standard:

DECLARE @BitMask INT 
SET @BitMask = 34 

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

Si dovrebbe contrassegnare la domanda per la piattaforma di database che si sta utilizzando.

Se questa è la SQL Server 2008, è possibile utilizzare gli operatori bit a bit (in particolare bit a bit o uguale) da confrontare con un numero intero i cui bit sono impostati al modello che vi interessa in fase di test per: http://msdn.microsoft.com/en-us/library/cc627409.aspx

Si noti che da imballaggio interi in questo modo, è probabile che si impedisca l'uso di qualsiasi indice su tali colonne.

0

In TSQL, 1 = true, 0 = false.
In MS Access, -1 = true, 0 = false.
...
Forse qualcuno può compilare gli altri dialetti.

Se stai interpretando un po 'in un livello di applicazione, si dovrebbe essere in grado di utilizzare una funzione di conversione (ad esempio, in VB si potrebbe dire IF convert.toboolean(myValue) THEN... di interpretare vero o falso.

1

per MySQL, è possibile utilizzare il bit-saggio AND operatore & con un po 'mascherare

Ad esempio, per ottenere un valore booleano true se il bit 2 (contando da 0) è fissata per column1, utilizzare questo:

where (column1 & 4) = 4 

questo lavoro per più controlli bit, ad esempio per verificare che entrambi i bit 0 e 2 sono impostati:

where (column1 & 5) = 5 
Problemi correlati