Odpověď na vaši otázku je použít Bitwise &
takhle:
SELECT * FROM UserTable WHERE Roles & 6 != 0
6
lze vyměnit za libovolnou kombinaci vašeho bitového pole, kde chcete zkontrolovat, že některý uživatel má jeden nebo více těchto bitů. Když se to snažím ověřit, obvykle mi přijde užitečné napsat to dlouhým písmem v binární podobě. Vaše tabulka uživatelů vypadá takto:
1 2 4
------------------
Dave 0 1 1
Charlie 0 1 0
Susan 0 0 1
Nick 1 0 0
Váš test (6) je tento
1 2 4
------------------
Test 0 1 1
Pokud projdeme každou osobu, která provádí bitový signál, a proti testu dostaneme toto:
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)
Výše uvedené by mělo demonstrovat, že všechny záznamy, jejichž výsledek není nula, mají jeden nebo více požadovaných příznaků.
Edit:Zde je testovací případ, kdy byste to chtěli zkontrolovat
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
nebo
select * from test where (roles & 2) != 0 // returns Dave & Charlie
nebo
select * from test where (roles & 7) != 0 // returns dave, charlie, susan & nick