有没有办法在SQL查询的WHERE部分中使用if语句?

时间:2015-04-21 13:01:27

标签: sql

有没有办法在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天后的日期是否不大于结束日期,否则我必须默认使用结束日期。

3 个答案:

答案 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

它确实很有效。

这只会在当月的第一个工作日是星期一时运行,因此我希望得到周末的数据。否则,我已经拥有它。