2013-12-13 27 views
0

我有一個DATETIME列,名爲[Date]。我只需要選擇[Date]列=星期日和星期六以及星期一到星期五從上午12:00到上午8:00以及下午5:00至12:00的記錄。T-SQL如何在DATETIME =週末和工作日之後選擇記錄

這裏是我的代碼:

SELECT * 
FROM table 
WHERE (DATEPART(weekday, [Date]) IN (1, 7) 
     OR (DATEPART(weekday, [Date]) IN (2, 3, 4, 5, 6) 
      AND (CAST([Date] AS TIME) BETWEEN '12:00am' 
            AND  '8:00am' 
       OR CAST([Date] AS TIME) BETWEEN '5:00pm' 
             AND  '12:00:00am'))) 

當我檢查的結果,我發現它缺少表中的一些記錄具有在「小時」 [日期]。我的代碼有什麼問題?

+0

你可以顯示一些丟失的行嗎? –

回答

0

有時,通過格式化代碼可以幫助您更好地查看邏輯(和/或)分組。

WHERE 

(DATEPART(weekday, [Date]) IN (1, 7)) --<-- Put an extra closing paren here to isolate this side of the disjunctive (OR) 

OR 

(
    DATEPART(weekday, [Date]) IN (2, 3, 4, 5, 6) 
    AND (
      (CAST([Date] AS TIME) BETWEEN '12:00am' AND '8:00am') --<--the first and last paren are not necessary, but help you to visually isolate this side of the disjunctive (OR) 
      OR 
      (CAST([Date] AS TIME) BETWEEN '5:00pm' AND '12:00:00am') --<-- same here 
     ) 
) 
0

我想通了。我將最後的'12:00:00am'改爲'11:59:59pm'。謝謝你的時間。

+3

對於更清潔/更簡單的代碼,您可以用比較來替換「之間」條件:CAST([Date] AS TIME)<='8:00 am'或CAST([Date] AS TIME)> ='5:00 pm'' – pvgoran

相關問題