2016-12-24 75 views
-1

我想在日期時間數據類型列(列DATE_AND_TIME)中過濾以檢測時間是在高峯時間而不是在週末日。在我的SQL語句下面,我收到以下錯誤:在SQL語句中比較日期時間的語法不正確

Incorrect syntax near '>'.

我在做什麼錯?

SELECT 
    CASE 
     WHEN DATEPART(HH, DATE_AND_TIME) BETWEEN 7 AND 9 
      AND DATE_AND_TIME != DATEPART(DW, DATE_AND_TIME + @@DATEFIRST - 1) > 5 
      THEN 'RUSH HOUR' 
     WHEN DATEPART(HH, DATE_AND_TIME) BETWEEN 16 AND 19 
      AND DATE_AND_TIME != DATEPART(DW, DATE_AND_TIME + @@DATEFIRST - 1) > 5 
      THEN 'RUSH HOUR' 
     ELSE 'NOT RUSHHOUR' 
    END 
FROM 
    TRAFFIC 
+1

你的代碼是一個爛攤子。嘗試闡明你的邏輯並將其與代碼相匹配。 –

+4

你的錯誤在這裏: 'DATEPART(DW,DATE_AND_TIME + @@ DATEFIRST - 1)'你不能同時進行兩次比較。或者,離開'> 5'或'!= DATE_AND_TIME' –

+0

什麼是'@@ DATEFIRST'? –

回答

0

試試這個:

SELECT CASE WHEN (DATEPART(HH,DATE_AND_TIME) BETWEEN 7 AND 9) AND DATE_AND_TIME != DATEPART(DW, DATEADD(DAY,@@DATEFIRST - 1,DATE_AND_TIME)) AND DATEPART(DW, DATEADD(DAY,@@DATEFIRST - 1,DATE_AND_TIME)) > 5 AND THEN 'RUSH HOUR' 
      WHEN (DATEPART(HH,DATE_AND_TIME) BETWEEN 16 AND 19) AND DATE_AND_TIME != DATEPART(DW, DATEADD(DAY,@@DATEFIRST - 1,DATE_AND_TIME)) AND DATEPART(DW, DATEADD(DAY,@@DATEFIRST - 1,DATE_AND_TIME)) > 5 THEN 'RUSH HOUR' 
      ELSE 'NOT RUSHHOUR' END 
FROM TRAFFIC 
+0

謝謝您的回答!有用! – sql123