2016-07-26 44 views
0

我想通过加入日历表来写一个WHERE子句来回顾3天当星期几是星期一。CASE语句与WHERE条款中的日期

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 

我在上面的“BETWEEN”运算符上出现错误。是否有可能做我想做的事,或者我以错误的方式去做这件事?

感谢您的帮助。

+0

请编辑您的问题,并添加标签为您正在使用的特定数据库。 'sql'可以是任何数量的东西...... MySQL,MS-SQL,Oracle .. –

+1

绝对不是mysql。 datediff只需要2个参数,而'getdate()'也不存在。 –

+0

@MarcB - 问题应该仍然有一个适当的标签,所以我们不必猜测。 –

回答

0

您需要添加可进行评估,以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 
0

你可以尝试一个简单的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() 
+0

您需要围绕'OR'子句使用括号,因为第一个包含'AND' –

+0

例如:SELECT 1 WHERE 1 = 0 AND 1 = 0 OR 0 <1'将返回1而SELECT 1 WHERE 1 = 0 AND(1 = 0或0 <1)'不会。至少,在条件分组中明确表达是一种很好的做法。 –