2016-12-24 72 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