2016-12-24 1 views
-1

Ich möchte in einer Datetime-Datentypspalte (Spalte DATE_AND_TIME) filtern, um zu erkennen, dass die Uhrzeit in der Hauptverkehrszeit ist und nicht an einem Wochenende. In meiner SQL-Anweisung unten bekomme ich die folgende Fehlermeldung:Falsche Syntax in SQL-Anweisung zum Vergleichen einer Datetime

Incorrect syntax near '>'.

Was mache ich falsch?

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

Ihr Code ist ein Chaos. Versuchen Sie, Ihre Logik zu formulieren und sie dem Code anzupassen. –

+4

Ihr Fehler ist hier: 'DATEPART (DW, DATE_AND_TIME + @@ DATEFIRST - 1)' Sie können nicht zwei Vergleiche gleichzeitig haben. Leave '> 5' oder'! = DATE_AND_TIME' –

+0

Was ist '@@ DATEFIRST'? –

Antwort

0

Versuchen Sie folgendes:

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

Vielen Dank für Ihre Antwort! Es klappt! – sql123