Jawaban atas pertanyaan Anda adalah dengan menggunakan &
Bitwise seperti ini:
SELECT * FROM UserTable WHERE Roles & 6 != 0
6
dapat ditukar dengan kombinasi bitfield Anda di mana Anda ingin memeriksa bahwa setiap pengguna memiliki satu atau lebih bit tersebut. Ketika mencoba untuk memvalidasi ini, saya biasanya merasa terbantu untuk menulis ini dengan tulisan tangan dalam biner. Tabel pengguna Anda terlihat seperti ini:
1 2 4
------------------
Dave 0 1 1
Charlie 0 1 0
Susan 0 0 1
Nick 1 0 0
Tes Anda (6) adalah ini
1 2 4
------------------
Test 0 1 1
Jika kita melewati setiap orang melakukan bitwaise Dan melawan tes kita mendapatkan ini:
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)
Di atas harus menunjukkan bahwa catatan apa pun yang hasilnya bukan nol memiliki satu atau lebih tanda yang diminta.
Sunting:Ini kasus uji jika Anda ingin memeriksanya
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
atau
select * from test where (roles & 2) != 0 // returns Dave & Charlie
atau
select * from test where (roles & 7) != 0 // returns dave, charlie, susan & nick