2011-08-23 18 views
11

Z SQL, chciałbym wykryć, czy określony bit jest włączony z typem kolumny całkowitej (MySQL)?SQL - Integer Type - Detect bit

Co mam zrobić?

Zasadniczo chcę wykryć, czy bit jest włączony, czy jest włączony, a następnie zignorować.

używam czegoś takiego teraz:

WHERE (column & 2) != 2 
+0

Czy mówimy o kolumna bitowa lub kolumna całkowita? Co masz na myśli przez? Proszę ponownie sformułować pytanie. – Caimen

+0

Jakiej bazy danych używasz? – Bohemian

+0

Flagi bitowe są w porządku dla wyliczeń w 3GL, ale 4GL, na przykład SQL, najlepiej działa z relacyjnymi danymi, tj. Relacjami krotek z atrybutami. – onedaywhen

Odpowiedz

13

Załóżmy, że sprawdzanie 3rd nieco następnie ...

SELECT bits & 8 = 8 FROM table; 

zwraca binarnie (0 lub 1) do tego, czy bit mowa (w tym przypadku trzecim) jest włączona lub wyłączona w każdym rzędzie w „bitów” kolumny.

użycie 2^x dla x-tego zamiast 8

na przykład w celu sprawdzenia 5. bit użyjemy 2^5 = 32

SELECT bits & 32 = 32 FROM table; 

to jednak niepotrzebnie skomplikowane. Po prostu użyj wartości logicznych w kilku kolumnach, co znacznie ułatwi.

+0

Czym dokładnie jest SELECT bity i 8 = 8 FROM table; robić? Wybieramy bity i 8 = 8 dla kolumny? – RoR

+0

Podstawową ideą jest to, że operator "&" określa bity, które są "włączone" w obu swoich argumentach. Tak (bity i 8 = 8) określa, czy 8 (który jest tylko trzecim bitem) i kolumna "bity" mają odpowiednie bity. Wynik zapytania jako całości to seria wyników binarnych, jeśli trzeci bit jest włączony. – PyKing

2

SQL obsługuje standardowe operatory bitowe:

DECLARE @BitMask INT 
SET @BitMask = 34 

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

Należy oznaczyć pytanie do platformy bazy danych, którego używasz.

Jeśli jest to SQL Server 2008, można użyć operatory bitowe (konkretnie bitowe lub równa) porównać do liczby całkowitej, którego bity są ustawione na wzór jesteś zainteresowany w testowaniu: http://msdn.microsoft.com/en-us/library/cc627409.aspx

Należy pamiętać, że opakowanie W ten sposób liczby całkowite prawdopodobnie uniemożliwiają użycie indeksów w tych kolumnach.

0

W TSQL, 1 = prawda 0 = false.
W MS Access, -1 = true, 0 = false.
...
Może ktoś może wypełnić inne dialekty.

Jeśli interpretacji trochę w warstwie aplikacji, powinieneś być w stanie korzystać z funkcji konwersji (np w VB można powiedzieć IF convert.toboolean(myValue) THEN... zinterpretować prawdziwe lub fałszywe.

1

dla MySQL, można użyć bitową AND operatora & z odrobiną maskować

Na przykład, aby uzyskać wartość logiczną true jeśli bit 2 (licząc od 0) jest ustawiony na Kolumnie1, użyj tego:

where (column1 & 4) = 4 

to będzie pracować dla wielu kontroli bitowych, na przykład w celu sprawdzenia, czy oba bity 0 i 2 są ustawione:

where (column1 & 5) = 5