Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल में दो बिटमास्क की तुलना यह देखने के लिए कि क्या कोई बिट मेल खाता है

आपके प्रश्न का उत्तर बिटवाइज़ & . का उपयोग करना है इस तरह:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर से PHP sqlsrv_connect:SQL सर्वर से कनेक्शन स्थापित करते समय नेटवर्क से संबंधित या आवृत्ति-विशिष्ट त्रुटि उत्पन्न हुई है

  2. SQL सर्वर एजेंट नौकरी खाता समस्या

  3. माता-पिता और अनंत बच्चों को वापस करने के लिए कथन का चयन करें

  4. टी-एसक्यूएल ISNULL() स्ट्रिंग को छोटा क्यों कर रहा है और COALESCE नहीं है?

  5. SQL सर्वर एजेंट जॉब (T-SQL) के लिए जॉब स्टेप अपडेट करें