2013-07-01 75 views
8

我有一個表的「創建」列作爲日期時間。檢查時間是否在兩次之間(時間DataType)

我想查詢來檢查Created值的時間是否在兩次之間。

第一行的創建日期時間爲'2013-07-01 00:00:00.000'(午夜),我試圖在11PM和7AM之間查詢項目。

select * 
from MyTable 
where CAST(Created as time) between '23:00:00' and '06:59:59' 

但是沒有結果返回。

我是否需要將我的時間轉換爲日期時間?

+3

第二天上午7點? –

+0

用一個例子(這裏)類似的問題[1] [1]:http://stackoverflow.com/questions/5125076/sql-query-to-select-dates-between-two-dates –

+0

是的,晚上11點到早上7點是 – TrueEddie

回答

26

我懷疑你要檢查它 11點或之前早上7點是:

select * 
from MyTable 
where CAST(Created as time) >= '23:00:00' 
    or CAST(Created as time) < '07:00:00' 
+0

這工作完美,謝謝! – TrueEddie

+0

很好的答案,但是這隻適用於SQL Server 2008和更新的版本 –

+0

如果您希望根據日期將項目組合在一起,還需要非常小心。如果今天早晨6點有東西被打包,那麼晚上11點30分,它會與其他東西打包在一起。如果你需要根據日期分組在一起,我會建議增加一個小時或減去七個小時,然後根據需要進行計算。 –

1

這也應該工作(即使是在SQL-Server 2005中):

SELECT * 
FROM dbo.MyTable 
WHERE Created >= DATEADD(hh,23,DATEADD(day, DATEDIFF(day, 0, Created - 1), 0)) 
    AND Created < DATEADD(hh,7,DATEADD(day, DATEDIFF(day, 0, Created), 0)) 

DEMO

6
select * 
from MyTable 
where CAST(Created as time) not between '07:00' and '22:59:59 997' 
-1

應該是AND而不是OR

select * 
from MyTable 
where CAST(Created as time) >= '23:00:00' 
    AND CAST(Created as time) < '07:00:00' 
+0

問題中沒有「OR」? – Carpetsmoker

+0

時間不能小於'7:00'並且大於'23:00',所以無論如何,AND都會返回0個記錄。 – MarredCheese

相關問題