【问题标题】:Add Case Statement in Where Clause在 Where 子句中添加 case 语句
【发布时间】:2014-02-20 20:41:15
【问题描述】:

我需要在where 子句中添加case 语句。我希望它根据 TermDate 的值运行以下任一语句。

Select * 
from myTable
where id = 12345
    AND TermDate CASE  
    WHEN NULL THEN
       AND getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)
    ELSE
    AND GETDATE < TermDate
    END

【问题讨论】:

    标签: sql select switch-statement case


    【解决方案1】:

    为什么不直接使用OR 条件?

    SELECT * 
    FROM  myTable
    WHEN  id = 12345
    AND   ((TermDate IS NULL AND 
            getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)) OR
           GETDATE() < TermDate)
    

    【讨论】:

    • 可能我们还需要在“OR”运算符之后添加“TermDate IS NOT NULL AND”
    • @codechimp value &lt; null 返回“未知”,这是不正确的,因此它不满足条件。添加TermDate IS NOT NULL 不会影响where 子句的功能。这可能会使查询更容易阅读,但这主要是个人喜好问题。
    【解决方案2】:

    由于我们都发布了三个确切的答案,显然太多了,这里使用您的case when 构造的版本。

    使用这个:

    select * 
    from myTable
    where id = 12345
    AND   case
          when TermDate IS NULL
               AND getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)
          then 1
          when GETDATE < TermDate
          then 1
          else 0
          end
          = 1
    

    【讨论】:

      【解决方案3】:

      您可以使用ANDsORs 完成此操作。尝试以下查询。

      Select * 
      From myTable
      where id = 12345
      AND ((TermDate IS NULL 
                AND GETDATE() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)) 
          OR (GETDATE() < TermDate))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 2014-09-08
        • 2021-03-14
        • 2020-03-26
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多