SQL CASE语句(将CASE语句保留在WHERE子句中)

时间:2010-12-13 10:04:29

标签: sql-server tsql case where-clause sql

我有一个名为:

的表
Ext_Meeting_Status

这有字段

  1. Ext_Meeting_Status_ID
  2. TEXT
  3. 值为:

    EXT_Meeting_Status_ID   Text
    1   Draft
    2   Published
    3   Cancelled
    4   Closed
    

    如果日期是今天,我如何返回“已发布”的“文本”字段,否则返回“关闭”。

    我尝试使用:

    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
    

2 个答案:

答案 0 :(得分: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 

我相信这应该有效..

还有一点需要注意:将当前日期与精确的毫秒级别进行比较可能不起作用,因为此时查询可能无法执行......

您可以尝试这样的事情。

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

答案 1 :(得分:0)

我不认为这是可能的。您可能想尝试将其全部放入子选择中并在那里使用CASE。