简体   繁体   English

在WHERE子句中带有日期的CASE语句

[英]CASE Statement with Dates in WHERE Clause

I am trying to write a WHERE clause to look back 3 days when the day of the week is Monday by joining in the calendar table. 我正在尝试编写WHERE子句,通过加入日历表来回顾星期几是星期一的3天。

WHERE        
CASE WHEN calendar.DW = 2 Then (date_created BETWEEN DATEADD(hour,8,DATEDIFF(d,0,GETDATE()-3))
            AND GETDATE() ELSE
        date_created BETWEEN DATEADD(hour,8,DATEDIFF(d,0,GETDATE()-1))
            AND GETDATE()
            END

I am getting an error on the "BETWEEN" operator for the above. 我在上面的“ BETWEEN”运算符上遇到错误。 Is it possible to do what I am attempting, or am I going about this in the wrong manner? 是否有可能做我尝试做的事情,还是我做错了呢?

Thanks for the help. 谢谢您的帮助。

You need to add a condition which can be evaluated to true or false , like so: 您需要添加一个可以评估为truefalse ,如下所示:

WHERE        
(CASE WHEN calendar.DW = 2 AND date_created BETWEEN DATEADD(hour,8,DATEDIFF(d,0,GETDATE()-3))
            AND GETDATE() THEN 1 WHEN
        date_created BETWEEN DATEADD(hour,8,DATEDIFF(d,0,GETDATE()-1))
            AND GETDATE() THEN 1 ELSE 0
            END) = 1

You could try a simple where clause: 您可以尝试一个简单的where子句:

WHERE calendar.DW = 2 AND 
      date_created BETWEEN DATEADD(hour,8,DATEDIFF(d,0,GETDATE()-3)
            AND GETDATE() 
      OR
      date_created BETWEEN DATEADD(hour,8,DATEDIFF(d,0,GETDATE()-1))
            AND GETDATE()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM