2016-07-26 32 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)'不會。至少,在條件分組中明確表達是一種很好的做法。 –