2016-12-24 3 views
-1

datetimeデータ型カラム(カラムDATE_AND_TIME)をフィルタリングして、時間の検出がラッシュアワーであり、週末の日付ではない場合。私のSQL文では、以下のエラーが表示されます。datetimeを比較する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)'一度に2つの比較を行うことはできません。 '> 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

関連する問題