La réponse à votre question est d'utiliser le bitwise &
comme ceci :
SELECT * FROM UserTable WHERE Roles & 6 != 0
Le 6
peut être échangé contre n'importe quelle combinaison de votre champ de bits où vous souhaitez vérifier qu'un utilisateur possède un ou plusieurs de ces bits. Lorsque j'essaie de valider cela, je trouve généralement utile d'écrire cela à la main en binaire. Votre table utilisateur 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 celui-ci
1 2 4
------------------
Test 0 1 1
Si nous passons en revue chaque personne faisant le bitwaise Et contre le test, nous obtenons ceci :
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 doit démontrer que tous les enregistrements dont le résultat n'est pas zéro ont un ou plusieurs des indicateurs demandés.
Edit :Voici le cas de test si vous souhaitez vérifier cela
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
ou
select * from test where (roles & 2) != 0 // returns Dave & Charlie
ou
select * from test where (roles & 7) != 0 // returns dave, charlie, susan & nick