我正在查询包含时间戳的表格(例如:2011-05-03 09:52:00)。
需要查询整个表格,并查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之间输入的时间戳。
最好的方法是什么?
谢谢!
答案 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))