我试图在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
请告诉我语法错误
答案 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()))
)