Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2008 में WHERE क्लॉज के भीतर केस स्टेटमेंट

सबसे पहले, CASE कथन भाग होना चाहिए अभिव्यक्ति की नहीं, अभिव्यक्ति की।

दूसरे शब्दों में, आपके पास हो सकता है:

WHERE co.DTEntered = CASE 
                          WHEN LEN('blah') = 0 
                               THEN co.DTEntered 
                          ELSE '2011-01-01' 
                     END 

लेकिन यह उस तरह से काम नहीं करेगा जैसा आपने उन्हें लिखा है जैसे:

WHERE 
    CASE LEN('TestPerson')
        WHEN 0 THEN co.personentered  = co.personentered
   ELSE co.personentered LIKE '%TestPerson'
    END 

इस तरह के संयुक्त OR कथनों का उपयोग करके आप बेहतर भाग्य प्राप्त कर सकते हैं:

WHERE (
        (LEN('TestPerson') = 0 
             AND co.personentered = co.personentered
        ) 
        OR 
        (LEN('TestPerson') <> 0 
             AND co.personentered LIKE '%TestPerson')
      )

हालांकि, किसी भी तरह से मुझे यकीन नहीं है कि आपको एक क्वेरी प्लान कितना अच्छा मिलेगा। एक WHERE . में इस प्रकार के षडयंत्र क्लॉज अक्सर क्वेरी ऑप्टिमाइज़र को इंडेक्स का उपयोग करने से रोकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्चर के रूप में संग्रहीत तिथियों की तुलना करना

  2. SQL सर्वर को Java डेटाबेस से कनेक्ट करना

  3. SQL सर्वर में प्राथमिक कुंजी कैसे बनाएं (T-SQL उदाहरण)

  4. मुझे स्पार्स कॉलम का उपयोग क्यों और कब करना चाहिए? (एसक्यूएल सर्वर 2008)

  5. अंकगणित अतिप्रवाह त्रुटि अभिव्यक्ति को डेटा प्रकार डेटाटाइम में परिवर्तित करना। (दिनांक समय प्रदर्शित करते समय ..)