Przepraszam, że prawdopodobnie zapytano wcześniej, ale trudno go było wyszukać. Próbuję zrozumieć, jeśli niektóre bity zostały ustawione, a niektóre nie zostały ustawione w jednej operacji. czy to możliwe?

Na przykład Chcę sprawdzić, czy piąty bit jest wyłączony, ale albo drugi lub trzeci bit jest włączony.

0
Zachary J Rollyson 20 październik 2020, 17:38

1 odpowiedź

Najlepsza odpowiedź

W sugerowanej sytuacji SQL możesz po prostu zamaskować trzy bitów i wykonać IN Sprawdź, czy akceptujesz wzory, np.

SELECT * FROM table
WHERE (field & 0x16) IN (0x2, 0x4);

Lub, jeśli akceptujesz jednocześnie drugie, jak i trzecie bity, możesz po prostu wykonać kontrolę zasięgu, ponieważ wszystkie trzy kombinacje, które akceptujesz wykazanie bez nakładania się z zakresem nie zaakceptowanych opcji:

SELECT * FROM table
WHERE (field & 0x16) BETWEEN 0x2 AND 0x6;

Zauważę to, że to działa, to nie świetny styl dla SQL (lub naprawdę języka). W praktyce prawdopodobnie chciałbyś trzymać się o nazwie pojedynczy {x0}} (NOT NULL), który zapewnia więcej informacji SQL (potencjalnie umożliwiając indeksowane wyszukiwania i tym podobne). Pisanie

SELECT * FROM table
WHERE (field2 = 1 OR field3 = 1) AND field5 = 0;

-- or for mutually exclusive
WHERE field2 + field3 = 1 AND field5 = 0;

Nie jest znacząco dłużej i jest znacznie bardziej jasny, co robisz (zakładając, że masz oczywiście więcej przydatnych nazwy polowych).

1
ShadowRanger 20 październik 2020, 15:12