Microsoft SQL在时间戳中查询小时数

时间:2011-05-03 16:11:00

标签: sql sql-server sql-server-2008

我正在查询包含时间戳的表格(例如:2011-05-03 09:52:00)。

需要查询整个表格,并查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之间输入的时间戳。

最好的方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

这个只能获得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'  

答案 2 :(得分: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))