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