sql >> Databáze >  >> RDS >> Sqlserver

Příkaz CASE v klauzuli WHERE v SQL Server 2008

Za prvé, CASE prohlášení musí být část výrazu, nikoli výrazu samotného.

Jinými slovy, můžete mít:

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

Ale nebude to fungovat tak, jak jste je napsali, např.:

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

Možná budete mít větší štěstí při použití kombinovaných výrazů NEBO, jako je tento:

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

I když v obou případech si nejsem jistý, jak skvělý plán dotazů získáte. Tyto typy podvodů v WHERE klauzule často zabrání optimalizátoru dotazů ve využívání indexů.



  1. Po instalaci na Mac resetujte kořenové heslo MySQL pomocí příkazu ALTER USER

  2. Jak vytvořit adresář v Oracle?

  3. Přehled pgModeler pro PostgreSQL

  4. Jaký je rozdíl mezi schématem a databází?