2010-12-13 6 views
0

Ich habe eine Tabelle mit dem Namen:SQL CASE-Anweisung (Beibehaltung der CASE-Anweisung in der WHERE-Klausel)

Ext_Meeting_Status 

Dies hat Felder

  1. Ext_Meeting_Status_ID
  2. TEXT

Die Werte sind:

EXT_Meeting_Status_ID Text 
1 Draft 
2 Published 
3 Cancelled 
4 Closed 

Wie gebe ich das Feld "Text" von "Published" zurück, wenn das Datum heute ist, andernfalls "Close" zurückgeben.

Ich habe versucht, mit:

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 

Antwort

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 

Ich glaube, das sollte funktionieren ..

Noch eine Anmerkung: aktuelles Datum auf das Niveau genauen Millisekunden Vergleich funktioniert möglicherweise nicht wie die Abfrage nicht zu dieser Zeit noch ausgeführt werden kann ...

Sie können so etwas versuchen.

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

Danke Kumpel - das klingt großartig – user532104

0

Ich glaube nicht, es möglich ist. Vielleicht möchten Sie versuchen, alles in einen Sub-Select zu setzen und dort den CASE zu verwenden.