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

有没有办法在SQL查询的WHERE部分使用if语句?,sql,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天后的日期是否不大于结束日期,否则默认情况下我必须使用结束日期。您可以使用CASE ex

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

您可以使用CASE expression:

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);

您可以使用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);

我发现:

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
而且它实际上工作得很好


这将只在一个月的第一个工作日是星期一时运行,因此我希望在该时间获取周末的数据。否则,我已经有了它。

我发现了以下内容:

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
而且它实际上工作得很好


这将只在一个月的第一个工作日是星期一时运行,因此我希望在该时间获取周末的数据。否则,我已经有了答案。

这个答案是根据问题中解释的问题而不是标题上的问题量身定制的

为了处理这种情况,不需要特殊的解决方案和/或关键字,可以使用常规的
WHERE
子句很好地处理:

 SELECT count(*) 
 from table_name tb 
 where (@enddate > dateadd("d",2,@date) AND date > tb.date)
       OR
       (dateadd("d",2,@date) > tb.date))

这个答案是根据问题中所解释的案例量身定制的,作为要解决的问题,而不是标题上的问题

为了处理这种情况,不需要特殊的解决方案和/或关键字,可以使用常规的
WHERE
子句很好地处理:

 SELECT count(*) 
 from table_name tb 
 where (@enddate > dateadd("d",2,@date) AND date > tb.date)
       OR
       (dateadd("d",2,@date) > tb.date))

您可以使用大小写表达式!这真的应该有一个正在使用的SQL引擎的标签。你在这里使用的是什么数据库-MySQL?你可以使用CASE表达式!这真的应该有一个正在使用的SQL引擎的标签。您在这里使用的是什么数据库-MySQL?我确实写了这个,但它的结果是“靠近'>'的语法不正确”!!我已经检查了三次方括号、标点符号、变量和变量类型,都没问题。。我想我快疯了。。。!这就是我正在使用的,它产生了我上面提到的错误…:(不,在您告知您收到错误后,我做了一点更改。因此,请复制它并重试。我找到了!!!从表tb中选择count(*)(CASE WHEN(@enddate>dateadd(“d”,2,@date)),然后选择@date ELSE dateadd(“d”,2,@date)END>tb.date);嗯,与我发布的内容唯一的区别是,在(@enddate>dateadd(“d”,2,@date))的条件下,您使用@date而不是date,这在您最初的帖子中是错误的。无论如何,我很高兴它为你工作!我确实写了这篇文章,但它的结果是“>'附近的语法不正确”!!我已经检查了三次方括号、标点符号、变量和变量类型,都没问题。。我想我快疯了。。。!这就是我正在使用的,它产生了我上面提到的错误…:(不,在您告知您收到错误后,我做了一点更改。因此,请复制它并重试。我找到了!!!从表tb中选择count(*)(CASE WHEN(@enddate>dateadd(“d”,2,@date)),然后选择@date ELSE dateadd(“d”,2,@date)END>tb.date);嗯,与我发布的内容唯一的区别是,在(@enddate>dateadd(“d”,2,@date))的条件下,您使用@date而不是date,这在您最初的帖子中是错误的。无论如何,我很高兴它为你工作!我同意;这比案例陈述更优雅。我同意;这比案例陈述更优雅。