आपके प्रश्न का उत्तर बिटवाइज़ &
. का उपयोग करना है इस तरह:
SELECT * FROM UserTable WHERE Roles & 6 != 0
6
आपके बिटफील्ड के किसी भी संयोजन के लिए आदान-प्रदान किया जा सकता है जहां आप यह जांचना चाहते हैं कि किसी भी उपयोगकर्ता के पास इनमें से एक या अधिक बिट्स हैं। इसे सत्यापित करने का प्रयास करते समय मुझे आमतौर पर बाइनरी में इसे लंबे समय तक लिखने में मदद मिलती है। आपकी उपयोगकर्ता तालिका इस तरह दिखती है:
1 2 4
------------------
Dave 0 1 1
Charlie 0 1 0
Susan 0 0 1
Nick 1 0 0
आपका परीक्षण (6) यह है
1 2 4
------------------
Test 0 1 1
यदि हम प्रत्येक व्यक्ति को बिटवाइज़ करते हुए देखते हैं और परीक्षण के विरुद्ध हमें ये मिलते हैं:
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)
उपरोक्त प्रदर्शित करना चाहिए कि कोई भी रिकॉर्ड जहां परिणाम शून्य नहीं है, उसमें एक या अधिक अनुरोधित झंडे हैं।
संपादित करें:यदि आप इसे जांचना चाहते हैं तो यह टेस्ट केस है
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
या
select * from test where (roles & 2) != 0 // returns Dave & Charlie
या
select * from test where (roles & 7) != 0 // returns dave, charlie, susan & nick