sql >> Database >  >> RDS >> Sqlserver

CASE-instructie binnen WHERE-clausule in SQL Server 2008

Allereerst de CASE verklaring moet deel zijn van de uitdrukking, niet de uitdrukking zelf.

Met andere woorden, u kunt het volgende hebben:

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

Maar het zal niet werken zoals je ze hebt geschreven, bijvoorbeeld:

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

Misschien heb je meer geluk met het gebruik van gecombineerde OR-statements zoals deze:

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

Hoewel, hoe dan ook, ik weet niet zeker hoe geweldig een queryplan je zult krijgen. Dit soort shenanigans in een WHERE clausule zal vaak voorkomen dat de query-optimizer indexen gebruikt.



  1. Hoe eerst op nummer te sorteren met Oracle SQL-query?

  2. JQuery star rating tutorial met php en mysql

  3. 5 praktische databasetips voor beginners

  4. Een praktisch gebruik van de SQL COALESCE-functie