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

Microsoft SQL查询时间戳中的小时数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想查询一个包含时间戳的表(例如:2011-05-03 09:52:00) 需要查询整个表并查找在任意日期、任意月份和任意年份的18:00:00到20:00:00之间输入的时间戳 最好的方法是什么 谢谢大家! 这只会得到18到20之间的时间戳,包括18:00:00和20:00:00 SELECT * FROM YourTable WHERE DATEPART(hh, YourColumn) BETWEEN 18 AND 20 SELECT * FROM YourTa

我想查询一个包含时间戳的表(例如:2011-05-03 09:52:00)

需要查询整个表并查找在任意日期、任意月份和任意年份的18:00:00到20:00:00之间输入的时间戳

最好的方法是什么


谢谢大家!

这只会得到18到20之间的时间戳,包括18:00:00和20:00:00

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

SELECT *     
FROM YourTable     
WHERE CONVERT(varchar(8), YourDateColumn, 108)  between '18:00:00' and '20:00:00'  
对于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'
选择*
从某处
其中convert(time,t.dtColumn)>=“18:00”
并转换(时间,t.dtColumn)<'20:00'

选择*
从某处
其中t.dtColumn>=dateadd(小时,18,转换(datetime,转换(varchar,t.dtColumn,112),112))
和t.dtColumn
OP希望“在18:00:00和20:00:00之间”。这将包括“20:59:59”范围的两侧是否都包括在内?i、 e.您希望时间戳>=
18:00:00
BETWEEN
包含在SQL Server中,因此将包含端点。右-是一个示例,因此如果OP不想要18:00,那么他可以这样做:介于“18:00:01”和“19:59:59”之间,尽管似乎已经选择了第一个答案(因此对他来说是可行的:)我指的是目前错误的文本解释(说“不包括”而不是“包括”)
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))