2011-05-03 123 views
3

我正在查詢包含時間戳的表(例如:2011-05-03 09:52:00)。Microsoft SQL查詢時間戳

需要查詢整個表格並查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之間輸入的時間戳。

什麼是最好的方法?

謝謝!

+0

在該範圍的兩側包容性?即您想要時間戳> ='18:00:00'和<='20:00:00'? – 2011-05-03 16:27:38

回答

7
SELECT * 
    FROM YourTable 
    WHERE DATEPART(hh, YourColumn) BETWEEN 18 AND 20 
+1

OP要求「18:00:00至20:00:00之間」。這將包括「20:59:59」 – 2011-05-03 16:22:47

+0

@Martin:你是對的。 – 2011-05-03 16:28:13

3

這一個只會betwee 18和20,時間戳包括18:00:00和20:00:00

 

SELECT *  
FROM YourTable  
WHERE CONVERT(varchar(8), YourDateColumn, 108) between '18:00:00' and '20:00:00' 
 
+1

SQL Server中包含'BETWEEN',因此將包含端點。 – 2011-05-03 16:57:12

+0

right - 就是一個例子,所以如果OP不想要18:00,他可以這樣做:在'18:00:01'和'19:59:59'之間 – 2011-05-03 16:59:51

+0

儘管看起來第一個答案已經被選中了它爲他工作:) – 2011-05-03 17:00:09

2

對於SQL Server 2008(什麼OP標記了一個問題,有關),明顯的方法很簡單:

select * 
from someTable t 
where convert(time,t.dtColumn) between '18:00' and '20:00' 

下面就爲SQL Server的任何版本的

select * 
from someTable t 
where t.dtColumn between dateadd(hour,18,convert(datetime,convert(varchar,t.dtColumn,112),112)) 
        and dateadd(hour,20,convert(datetime,convert(varchar,t.dtColumn,112),112)) 

Between是對測試範圍的上限和下限的兼容性測試WRT。爲了使測試獨家WRT一個約束或其他的,你需要這樣的東西沿着這些路線:

select * 
from someTable t 
where convert(time,t.dtColumn) >= '18:00' 
    and convert(time,t.dtColumn) < '20:00' 

select * 
from someTable t 
where t.dtColumn >= dateadd(hour,18,convert(datetime,convert(varchar,t.dtColumn,112),112)) 
    and t.dtColumn < dateadd(hour,20,convert(datetime,convert(varchar,t.dtColumn,112),112))