在具有Date Between的子句的where where中添加case语句

时间:2016-05-02 07:19:21

标签: sql sql-server

我试图在where子句中添加case,但是语法错误。

我在下面的代码 AND hh 等中显示语法错误

select * from my_under mu
    where mu.modified_date between
        CASE 
            WHEN @lastRunTime IS NOT NULL 
                THEN @lastRunTime *AND*  DATEADD(hh,-@timeInterval,DATEADD(Mi,1,@lastRunTime))
            *ELSE* 
                DATEADD(*hh*,-@timeInterval,DATEADD(*Mi*,1,GETDATE())) AND DATEADD(*hh*,-@timeInterval,GETDATE()) 
        END

请告诉我语法错误

1 个答案:

答案 0 :(得分:2)

使用以下查询(AND / OR)逻辑来实现您的期望,因为它很容易,而不是使用CASE语句。

基于@lastRunTime值(NULL / NOT NULL),where where条件中的任何一个都可以工作:

SELECT * 
FROM my_under mu
WHERE (@lastRunTime IS NOT NULL 
       AND (mu.modified_date BETWEEN @lastRunTime AND DATEADD(hh, -@timeInterval, DATEADD(Mi, 1, @lastRunTime)))
      )
    OR
      (@lastRunTime IS NULL 
       AND (mu.modified_date BETWEEN DATEADD(hh, -@timeInterval, DATEADD(Mi, 1, GETDATE())) AND DATEADD(hh, -@timeInterval, GETDATE()))
      )