sql >> Databasteknik >  >> RDS >> Sqlserver

CASE-sats inom WHERE-satsen i SQL Server 2008

Först och främst, CASE uttalandet måste vara del av uttrycket, inte uttrycket i sig.

Du kan med andra ord ha:

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

Men det kommer inte att fungera som du har skrivit dem, t.ex.:

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

Du kanske har bättre lycka med att använda kombinerade ELLER-satser som detta:

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

Även om jag i vilket fall som helst inte är säker på hur bra en frågeplan du kommer att få. Dessa typer av sken i en WHERE klausul kommer ofta att förhindra frågeoptimeraren från att använda index.



  1. Hur man beräknar intäkter i MySQL

  2. Få bara datum utan tid i Oracle

  3. Nya AMD-processorfamiljer kan jämföras bra med nya Intel-processorer

  4. Hur fastighetsförvaltare kan förbättra effektiviteten med en databas