2015-11-14 66 views
0

我有興趣在過去六個月內完成任務的數據。問題是我有興趣只關注上午06:00至晚上9:00之間完成的數據。SQL Server:如何將數據綁定到特定的時間間隔?

我不知道如何將時間條件合併到我的SQL語句中。有人能幫助我嗎?

我簡單的SQL代碼如下:

Select TimeTaskCompleted, Task 
From Task 
Where TimeTaskCompleted between ‘07/01/2015’ and ‘09/30/2015’ 

感謝

** TimeTaskCompleted是一個DateTime列。

回答

2

只需使用DATEPART function

Select TimeTaskCompleted, Task 
From Task 
Where TimeTaskCompleted between ‘07/01/2015’ and ‘09/30/2015’ 
AND DATEPART(hh,TimeTaskCompleted) between 6 and 20 --24 hour time 

SQLFiddle

+0

感謝您的快速解決 –

0

你可以用子查詢來解決這個問題;在過去的6個月中,我改變了查詢的工作方式,而不是對日期範圍進行硬編碼,這爲我提供了一系列可用的數據。然後TimeTaskCompleted值轉換爲TIME數據類型,並用它來篩選結果到你感興趣的時間範圍

SELECT * 
FROM (
    SELECT TimeTaskCompleted, Task 
    FROM Task 
    WHERE TimeTaskCompleted > DATEADD(Month, -6, GETDATE()) 
) AS T1 
WHERE CAST(TimeTaskCompleted AS TIME) BETWEEN '06:00' and '21:00' 
+0

你不需要這個子查詢。否則,邏輯是合理的。 –

2

一些評論。您不應該使用帶日期/時間列的between,因爲它很混亂。您的表情找不到在2015-09-30完成的任務。我假定打算包括9月的最後一天。

一種更好的方式來編寫查詢是有明確的不平等和使用ISO標準的日期格式:

Select TimeTaskCompleted, Task 
From Task 
Where TimeTaskCompleted >= '2015-07-01' and 
     TimeTaskCompleted < '2015-10-01'; 

(如果你想明確的SQL Server的日期,然後取出連字符;上面可以被誤解爲。YYYY-MM-DD一個internationanalization設置)

然後,您可以添加任何的其他的答案提出的條件,但我不會用between這裏之一:

where CAST(TimeTaskCompleted AS TIME) >= '06:00:00' and 
     CAST(TimeTaskCompleted AS TIME) <= '21:00:00' 

或:

where datepart(hour, TimeTaskCompleted) between 6 and 20 

注:後者可能會有點混亂,因爲它在邏輯(下午8:00)說:「20」,但我們的目的是去「下午9:00」 。

+0

非常好的解釋..謝謝 –

相關問題