La réponse à votre question est l'utilisation de la fonction Bitwise &
comme ceci :
SELECT * FROM UserTable WHERE Roles & 6 != 0
En 6
peut être échangé contre n'importe quelle combinaison de votre champ de bits lorsque vous voulez vérifier que n'importe quel utilisateur possède un ou plusieurs de ces bits. Lorsque j'essaie de valider cela, je trouve généralement utile de l'écrire à la main en binaire. Votre table d'utilisateurs ressemble à ceci :
1 2 4
------------------
Dave 0 1 1
Charlie 0 1 0
Susan 0 0 1
Nick 1 0 0
Votre test (6) est le suivant
1 2 4
------------------
Test 0 1 1
Si l'on passe en revue chaque personne effectuant le test bitwaise et qu'on le compare au test, on obtient les résultats suivants :
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)
Ce qui précède devrait démontrer que tous les enregistrements dont le résultat est différent de zéro possèdent un ou plusieurs des indicateurs demandés.
Edit : Voici le cas de test si vous voulez le vérifier
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