2011-03-17 9 views
8

मैं कैसे प्राप्त होगा का परिणाम का चयन करें:SQL विवरण में एक तुलना

select (1 < 2) as One, (1 > 2) as Two 

इतना है कि यह निम्नलिखित परिणाम प्राप्त करेगी:

One  Two 
----------------- 
True False 

मैं एसक्यूएल सर्वर, लेकिन एक का उपयोग कर रहा क्रॉस डीबीएमएस उदाहरण अच्छा होगा।

+0

कई लोगों ने सही ढंग से जवाब दिया, मैं बस इसे गैर-मस्तिष्क-क्षतिग्रस्त इंजनों जैसे MySQL और PostgreSQL में जोड़ना चाहता हूं, जैसा कि आप लिखते हैं। ओरेकल और एमएसएसक्यूएल में स्पष्ट रूप से बूलियन प्रकार है लेकिन केवल आंतरिक रूप से (तुलना ऑपरेटर के परिणामस्वरूप), लेकिन एक डेटाटाइप के रूप में नहीं जिसे 'SELECT' से वापस किया जा सकता है। कोई विचार क्यों नहीं। – Amadan

+0

@Amadan एक कारण के लिए इसे आजमाएं - यह एएनएसआई एसक्यूएल स्पेक में नहीं है। एसक्यूएल-2003 भी नहीं http://savage.net.au/SQL/ – RichardTheKiwi

+0

@ रिचर्ड यह क्या है? http://savage.net.au/SQL/sql-2003-2.bnf.html#boolean%20type जैसा कि मैं समझता हूं समस्या यह है कि लोग इस बात से सहमत नहीं हो सकते कि न्यूल-विस्तारित ट्राइनरी में लॉजिकल ऑपरेशंस का नतीजा क्या है तर्क होना चाहिए - लेकिन मुझे लगता है कि यह एक बकवास तर्क है, क्योंकि आपके पास वास्तव में तुलना के परिणामस्वरूप बूलियन प्रकार होगा, और आपके पास वहां शून्य होगा, और इसे किसी भी तरीके से संभालने की आवश्यकता है - परिणाम को होने से रोकना मेरी राय में, कार्पेट के नीचे सीधे गंदगी वापस आ गई है। – Amadan

उत्तर

13

मान लें कि यह SQL सर्वर है, आप CASE कथन का उपयोग कर सकते हैं।

select (case when (1 < 2) then 'True' else 'False' end) as one, 
     (case when (1 > 2) then 'True' else 'False' end) as two 
from table 

स्थिति के स्थान पर, आप किसी भी चर या किसी भी कॉलम मान का भी उपयोग कर सकते हैं। मूल रूप से एक अभिव्यक्ति।

+1

SQL सर्वर के साथ आपको क्लॉम से भी आवश्यकता नहीं है। –

+0

@ डेव - हाँ, आप सही हैं। 'प्रेषण' का उपयोग तब किया जाना चाहिए जब अभिव्यक्ति में तालिका से स्तंभों का कोई संदर्भ हो। –

0

खैर, Oracle में आप की तरह

SELECT CASE 
     WHEN 1 < 2 THEN 
      'TRUE' 
     ELSE 
      'FALSE' 
     END AS ONE, 
     CASE 
     WHEN 1 > 2 THEN 
      'TRUE' 
     ELSE 
      'FALSE' 
     END AS TWO 
    FROM DUAL; 

ध्यान दें कि Oracle डाटाबेस में एक बूलियन प्रकार नहीं है (जैसा कि PL/SQL करने का विरोध किया है, जो है बूलियन के करता है) तो कुछ कर सकते हैं केस एक्सप्रेशन कैरेक्टर स्ट्रिंग्स लौटते हैं।

साझा करें और आनंद लें।

0

एक मामले बयान का उपयोग करें:

declare @value1 int, @value2 int 
set @value1 = 1 
set @value2 = 2 

select 
case when (@value1 < @value2) then 'True' else 'False' end as One 
case when (@value1 > @value2) then 'False' else 'True' end as Two 
from table 

अपनी जरूरत के आधार पर, आप कर सकते हैं मूल्यों में कठिन कोड, या आप जब आप मूल्यों को बदल सकते हैं के लिए इस के समान कुछ कर सकते हैं। आप केस कथन को एक कॉलम में भी जोड़ सकते हैं, या कम या समान प्रकार की तुलना करने के लिए इसे तोड़ सकते हैं।

संबंधित मुद्दे