sql - पसंद न करें और विपरीत परिणाम लौटाना पसंद नहीं है




sql-server tsql sql-like (5)

  1. Select * from tbl1 
    WHERE ([TextCol] NOT LIKE '%TAX%') AND ([TextCol] NOT LIKE '%TAX%')
    
  2. select * from tbl1
    where [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL
    

मेरे पास 200 रिकॉर्ड्स वाली एक टेबल है जिसमें से 10 रिकॉर्ड में टेक्स्ट 'टैक्स' है।

जब मैं निष्पादित कर रहा हूँ

Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'

तो मुझे परिणाम उन 10 रिकॉर्ड्स के साथ सही ढंग से सेट मिलता है।

लेकिन जब मैं उन अभिलेखों को बाहर करने की कोशिश कर रहा हूं

Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'

यह 1 9 0 के बजाय केवल 100 रिकॉर्ड लौटा रहा है।


(ए) एसक्यूएल तुलना ऑपरेटर के परिणामस्वरूप तीन संभावित मान हैं: सही, गलत और अज्ञात। यदि एक या दोनों ऑपरेशंस NULL तो परिणाम अज्ञात है। निम्नलिखित उदाहरण पर विचार करें जहां हम निरंतर (18) के साथ कुछ मूल्यों (एक व्यक्ति की आयु) की तुलना करते हैं:

21   >= 18 -- True
15   >= 18 -- False
NULL >= 18 -- Unknown

जैसा कि आप देख सकते हैं, डेटाबेस तय नहीं कर सकता है कि क्या NULL 18 से अधिक / बराबर है या नहीं।

(बी) डेटाबेस केवल उन पंक्तियों को वापस करेगा जहां WHERE क्लॉज सही पर मूल्यांकन करता है। अभिव्यक्ति को बदलना (उदाहरण के लिए WHERE age >= 18 बदल गया है WHERE age < 18 ) अज्ञात परिणामों को प्रभावित नहीं करता है।

आप NULL मानों से मेल खाने के लिए IS [NOT] NULL का उपयोग कर सकते हैं। निम्न क्वेरी उन पंक्तियों का चयन करेगी जहां कॉलम पैटर्न से मेल नहीं खाता है या कॉलम पूर्ण है:

WHERE [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

ISNULL और COALESCE जैसे कार्यों को NULL को कुछ मान में बदलने के लिए उपयोग किया जा सकता है।


आपको नल मूल्यों की भी जांच करनी होगी:

    [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

यह शून्य मूल्यों का भी ख्याल रखना चाहिए, शायद यही कारण है कि आपको आउटपुट में सभी पंक्तियां क्यों नहीं मिलीं।


यह मेरे साथ भी एक बार होता है! इसके चारों ओर मेरे सिर को तोड़ने के बाद मुझे पता चला कि यह शून्य मानों के कारण था, इसलिए आप इस क्वेरी का उपयोग इससे बचने के लिए कर सकते हैं:

WHERE CASE WHEN [TextCol] IS NULL
           THEN 'default' 
           ELSE [TextCol] 
      END NOT LIKE '%TAX%'

MongoDB कम्पास के साथ, आपको सख्त मोड सिंटैक्स का उपयोग करने की आवश्यकता है, जैसे:

{ "text": { "$regex": "^Foo.*", "$options": "i" } }

(मोंगोडीबी कम्पास में, यह महत्वपूर्ण है कि आप " इसके बजाय " उपयोग करें)





sql sql-server tsql sql-like