sql – 在带有Date Between的子句的where where中添加case语句

我正在尝试在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

请告诉我语法错误

最佳答案 使用以下查询(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()))
      )
点赞