2010-12-13 82 views
0

J'ai une table nommée:Déclaration SQL CASE (en gardant l'instruction CASE au sein de la clause WHERE)

Ext_Meeting_Status 

Cela a des champs

  1. Ext_Meeting_Status_ID
  2. TEXTE

Le les valeurs sont:

EXT_Meeting_Status_ID Text 
1 Draft 
2 Published 
3 Cancelled 
4 Closed 

Comment retourner le champ "Texte" de "Publié" si la date est aujourd'hui, sinon retourner "Fermer".

J'ai essayé d'utiliser:

select * from Ext_Meeting_Status 
where 
GETDATE() = CASE 
    WHEN (GETDATE() = '2010-12-13 10:02:31.560' ) 
    THEN (Ext_Meeting_Status_ID=2) 
    ELSE (Ext_Meeting_Status_ID=4) 
    END 

Répondre

2
select * from Ext_Meeting_Status 
    where Ext_Meeting_Status_ID = 
    CASE WHEN (GETDATE() = '2010-12-13 10:02:31.560') 
    THEN (2)  
    ELSE (4) 
END 

Je crois que cela devrait fonctionner ..

Une note plus: Comparaison date au niveau de la milliseconde exacte peut ne pas fonctionner que la requête ne peut pas s'exécuter à ce moment-là ...

Vous pouvez essayer quelque chose comme ça.

Select getdate(), * from #Temp 
    Where ID = Case when getdate() between '2010-12-13 05:21:08.240' and '2010-12-13 05:22:08.240' 
       Then 1 
       Else 2 
      End 
+0

Merci mon pote - cela sonne bien – user532104

0

Je ne pense pas qu'il soit possible. Vous voudrez peut-être essayer de tout mettre dans un sous-select et utiliser le CAS.