"और" और "और" के बीच अंतर


13

मैं तार्किक संचालन के लिए पूर्वता के क्रम को समझने की कोशिश कर रहा हूं और निम्नलिखित कोड हैं:

declare @T bit ='TRUE'
declare @F bit ='False'

print @T and @F

और यह एक त्रुटि देता है

कीवर्ड और 'के पास गलत सिंटैक्स।

मैंने 'और' को 'और' से बदल दिया, और कोड फिर से काम करता है। पूर्व कोड काम क्यों नहीं किया? मैं SQL सर्वर का उपयोग कर रहा हूँ।

जवाबों:


29
print @T & @F

रिटर्न 0

&है बिटवाइस और ऑपरेटर।

& बिटवाइज़ ऑपरेटर एक बिटवाइज़ लॉजिकल और दोनों एक्सप्रेशन के बीच, प्रत्येक एक्सप्रेशन को दोनों एक्सप्रेशंस के लिए करता है। परिणाम में बिट्स 1 पर सेट होते हैं यदि और केवल तभी दोनों बिट्स (वर्तमान बिट के लिए हल किए जा रहे हैं) में इनपुट का मान 1 है; अन्यथा, परिणाम में बिट 0 पर सेट है।

आपके मामले में मूल्य के साथ डेटाटाइप का परिणाम होता है और इसलिए इसका @T & @Fसमाधान होता है1 & 0BIT0

जब PRINTऑपरेटर को पास किया जाता है तो यह bitपरिणाम अनुमानित रूप से स्ट्रिंग और ग्राहक को परिणाम आउटपुट के लिए डाल दिया जाता है।


print @T and @F

इसके साथ काफी गलत है।

AND

दो बूलियन अभिव्यक्तियों को मिलाता है और दोनों अभिव्यक्तियों के सही होने पर TRUE लौटाता है

bitबूलियन के समान नहीं है। वे विनिमेय नहीं होते हैं और bitजब जरूरत होती है (SQL सर्वर SQL बूलियन डेटाटाइप लागू नहीं करता है) तो SQL सर्वर अंतर्निहित रूप से बूलियन डेटाटाइप को नहीं डालेगा।)

तो आप की तरह एक अभिव्यक्ति का उपयोग करने की आवश्यकता होगी

@T = 'TRUE' AND @F = 'TRUE'

के बजाय

@T and @F

फिर भी आपकी समस्याएं खत्म नहीं हुई हैं - PRINTवैसे भी एक बूलियन अभिव्यक्ति को स्वीकार नहीं करता है। आप CASEनीचे के रूप में अभिव्यक्ति का उपयोग कर सकते हैं ।

PRINT CASE 
          WHEN     (@T = 'TRUE' AND @F = 'TRUE') THEN 'True' 
          WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False' 
          ELSE 'Unknown' -- SQL uses three valued logic
      END

आपके उत्तर के लिए धन्यवाद! मैंने वास्तव में उससे बहुत कुछ सीखा है!
जेसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.