La risposta alla tua domanda è usare Bitwise &
così:
SELECT * FROM UserTable WHERE Roles & 6 != 0
Il 6
può essere scambiato con qualsiasi combinazione del tuo campo di bit in cui desideri verificare che qualsiasi utente abbia uno o più di quei bit. Quando provo a convalidarlo, di solito trovo utile scriverlo a mano in binario. La tua tabella utente ha questo aspetto:
1 2 4
------------------
Dave 0 1 1
Charlie 0 1 0
Susan 0 0 1
Nick 1 0 0
Il tuo test (6) è questo
1 2 4
------------------
Test 0 1 1
Se esaminiamo ogni persona che esegue il bitwaise E contro il test otteniamo questi:
1 2 4
------------------
Dave 0 1 1
Test 0 1 1
Result 0 1 1 (6)
Charlie 0 1 0
Test 0 1 1
Result 0 1 0 (2)
Susan 0 0 1
Test 0 1 1
Result 0 0 1 (4)
Nick 1 0 0
Test 0 1 1
Result 0 0 0 (0)
Quanto sopra dovrebbe dimostrare che qualsiasi record in cui il risultato non è zero ha uno o più dei flag richiesti.
Modifica:ecco il test case se vuoi verificarlo
with test (id, username, roles)
AS
(
SELECT 1,'Dave',6
UNION SELECT 2,'Charlie',2
UNION SELECT 3,'Susan',4
UNION SELECT 4,'Nick',1
)
select * from test where (roles & 6) != 0 // returns dave, charlie & susan
o
select * from test where (roles & 2) != 0 // returns Dave & Charlie
o
select * from test where (roles & 7) != 0 // returns dave, charlie, susan & nick