एमएसडीएन का कहना है कि BIT प्रकार मान 0, 1 या NULL स्टोर कर सकता है। (तथ्य यह है कि एक सा मूल्य, शून्य ही बिट मूल्य से अलग से संग्रहीत किया जाना चाहिए है बिट मूल्यों संकुचित किया जा सकता है के बाद से तो यह है कि 8 बिट मूल्यों एक बाइट में संग्रहीत हैं।)
याद रखें कि एक कहां खंड में एक शर्त स्थिति सही होने पर एक पंक्ति का चयन करता है। अधिकांश बाइनरी भविष्यवाणियों (शर्तों) के लिए, यदि आप कुछ मूल्य के साथ न्यूल की तुलना करते हैं, तो परिणाम नल या अनन्य (सत्य नहीं) है। इसलिए, उदाहरण के लिए, यदि कॉलम में मान शून्य है, तो column = 0
न्यूल या अनकॉन्ने का मूल्यांकन करता है, और column <> 0
भी करता है।
आपके प्रश्नों को देखते हुए:
SELECT * FROM table WHERE bit_column_value <> 1
कहाँ bit_column_value
स्तंभ में मान 1 है, हालत गलत तो पंक्ति वापस नहीं किए गए है, जहां मान 0 है, स्थिति सत्य है इसलिए पंक्ति वापस आती है; और जहां मूल्य शून्य है, स्थिति भी पूर्ण या अज्ञात है इसलिए पंक्ति वापस नहीं आती है।
SELECT * FROM table WHERE bit_column_value IS NULL
SQL मानक के अनुसार, [नहीं] शून्य विधेय, और संबंधित है [नहीं] {सही | FALSE | अज्ञात} विधेय, थोड़े अलग हैं। आईएस नल परीक्षण सही लौटाता है यदि परीक्षण मूल्य शून्य है; अन्यथा, वे गलत लौटते हैं (और कभी भी अनन्य नहीं लौटाते हैं)। आईएस [नहीं] {TRUE | FALSE | UNKNOWN} परीक्षण समान हैं; यदि मान निर्दिष्ट प्रकार का है और अन्यथा गलत है (UNKNOWN नहीं) तो वे सत्य लौटते हैं। उदाहरण के लिए:
Column IS TRUE IS FALSE IS UNKNOWN IS NOT TRUE IS NOT FALSE IS NOT UNKNOWN
FALSE FALSE TRUE FALSE TRUE FALSE TRUE
TRUE TRUE FALSE FALSE FALSE TRUE TRUE
NULL FALSE FALSE TRUE TRUE TRUE FALSE
तो, अपने दूसरे प्रश्न में, केवल पंक्तियों जहां bit_column_value
Null मूल्य (जो दोनों 0 से अलग है और 1) का चयन किया जाएगा है - सही, और न ही गलत नहीं।
मैं सभी पंक्तियों जहां इस बिट कॉलम को या तो शून्य या नहीं सही है प्राप्त करने का प्रयास कर रहा हूँ।
प्रयास आपके विनिर्देशन से सीधे क्वेरी लेखन:
SELECT * FROM table WHERE bit_column_value IS NULL OR bit_column_value IS NOT TRUE
SELECT * FROM table WHERE bit_column_value IS NULL OR bit_column_value = FALSE
SELECT * FROM table WHERE bit_column_value IS NULL OR bit_column_value <> TRUE
SELECT * FROM table WHERE bit_column_value IS NOT TRUE
ऊपर सच्चाई तालिका को देखते हुए, क्ष यूरी 4 आपको इच्छित परिणाम देगा - प्रमुख चेतावनी के साथ कि मैं निश्चित नहीं हूं कि एमएस एसक्यूएल सर्वर आईएस [NOT] {TRUE | FALSE | UNKNOWN} का समर्थन करता है। Predicates पर एमएसडीएन से निर्णय, IS [NOT] {TRUE | FALSE | UNKNOWN} भविष्यवाणी समर्थित नहीं है (लेकिन मैन्युअल के सही भाग को याद किया होगा)। यदि यह सही है, आप क्वेरी 2 में से एक या 3. उपयोग करने की आवश्यकता
(इन विधेय के साथ कुछ अतिरिक्त जटिलताओं रहे हैं जब मूल्य एक सरल स्तंभ नहीं है, लेकिन एक पंक्ति मूल्य है। हालांकि, यह प्रासंगिक नहीं है आपके प्रश्न या समस्या के लिए; दोगुना नहीं है क्योंकि एमएस एसक्यूएल सर्वर उन्हें समर्थन नहीं दे रहा है।)
दरअसल, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' FALSE'। लेकिन परिणाम 'WHERE' खंड में समान है, दोनों पंक्तियां खारिज कर दी गई हैं, केवल' TRUE' पास हैं। –
हाँ आप सही हैं, लेकिन मैं जहां खंड या स्थिति में शामिल होने के परिणाम के लिए परिणाम का जिक्र कर रहा था। जवाब में इसे स्पष्ट किया है। –