有没有办法在SQL查询的where部分使用if语句?
例如:
SELECT count(*)
from table_name tb
where ( if (@enddate>dateadd("d",2,@date) then date > tb.date
else dateadd("d",2,@date)>tb.date) )
我需要以某种方式检查我检查2天后的日期是否不大于结束日期,否则我必须默认使用结束日期。
答案 0 :(得分:4)
您可以使用CASE表达式:
SELECT count(*)
FROM table_name tb
WHERE (CASE WHEN (@enddate>dateadd("d",2,@date)) THEN date > tb.date
ELSE
dateadd("d",2,@date)>tb.date
END);
答案 1 :(得分:1)
这个答案适用于解决问题的案例,作为要解决的问题,而不是标题。
要处理这种情况,不需要特殊的解决方案和/或关键字,使用常规WHERE
子句可以很好地处理它:
SELECT count(*)
from table_name tb
where (@enddate > dateadd("d",2,@date) AND date > tb.date)
OR
(dateadd("d",2,@date) > tb.date))
答案 2 :(得分:0)
我发现了以下内容:
CASE
WHEN (DATENAME(dw,@st) = 'Monday')
AND (
((Day(@st) = 01))
OR ((Day(@st) = 02))
OR ((Day(@st) = 03))
)
THEN DATEADD(DAY,-2,@st)
ELSE DATEADD(DAY, - 1, DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0))
END
它确实很有效。
这只会在当月的第一个工作日是星期一时运行,因此我希望得到周末的数据。否则,我已经拥有它。