2011-05-03 119 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))