2010-10-06 11 views
5

अब मुझे पता है आप सीधे कुछ भी करने के लिए शून्य तुलना कर सकते हैं नहीं है (जैसा कि अशक्त अज्ञात है) तो मैं निम्नलिखित कैसे प्राप्त होगा हो सकता है:तुलना करें जब मूल्य दोनों शून्य या पाठ

select * 
    from Material as m 
    where MtrlCode = 826 and 
      Exposlimit <> 'compareMe' 

कहाँ Exposlimit शून्य हो सकता है या यह नहीं हो सकता है। 'तुलना करें' भी शून्य हो सकता है।

इसलिए मैं दोनों की तुलना कैसे करूं? दोनों पक्ष या तो पाठ या नल हो सकते हैं।

उत्तर

5
select * 
from Material as m 
where MtrlCode = 826 
    and (Exposlimit <> 'compareMe' 
     or (Exposlimit is null and compareme is not null) 
     or (Exposlimi is not null and compareme is null)) 
+0

खूबसूरती से काम करता है, बहुत बहुत धन्यवाद। –

1
select * 
    from Material as m 
    where (MtrlCode = 826 or MtrlCode IS NULL) and 
      (Exposlimit <> 'compareMe' or Exposlimit IS NULL) 
2

ऐसे मामलों के लिए IFNULL फ़ंक्शन का उपयोग करें।

अर्थात

कहां IFNULL (FieldA, 'MagicConstant') = IFNULL (FieldB, 'MagicConstant')

+0

क्या आईएफएनयूएल टी-एसक्यूएल में मौजूद है? यहां तक ​​कि यदि आप ISNULL का उपयोग करते हैं, तो ऑप्टिमाइज़र आपके द्वारा परिभाषित किए गए किसी भी अनुक्रमणिका का उपयोग करने के लिए संघर्ष करेगा। –

+0

@ पॉल, हाँ sql-server फ़ंक्शन-आधारित इंडेक्स नहीं है, और वर्कअराउंड (http://www.sqlservercentral.com/scripts/T-SQL+Aids/31906/) बहुत बदसूरत लग रहा है। –

0

आप इस कोशिश की?

select * 
    from Material as m 
    where MtrlCode = 826 and 
      Exposlimit IS NOT NULL AND 'compareMe' IS NOT NULL AND Exposlimit <> 'compareMe' 
0

पर विचार करें यह समानता खोजने के लिए आसान है कि:

(Column = @Value or (Column is null and @Value is null)) 

कौन सा कथन सही में परिणाम है जब दोनों मूल्यों बराबर हैं। हम आदर्श इस बयान नकारना करने असमानता को खोजने के लिए सक्षम हो जाएगा, लेकिन SQL की त्रिकोणीय राज्य तर्क यह है कि विचार टूट जाता है इसलिए NOT(UNKNOWN) = UNKNOWN

--DO NOT USE, broken 
NOT (Column = @Value or (Column is null and @Value is null)) 

के रूप में, अगर हम केवल TRUE मूल्य के लिए जाँच, और यह नकारना, हम अभी भी एक पठनीय ऑपरेशन के साथ खत्म हो गया।

CASE WHEN Column is null and @Value is null or Column = @Value THEN 1 ELSE 0 END = 0 
संबंधित मुद्दे