我正在查询包含时间戳的表(例如:2011-05-03 09:52:00)。Microsoft SQL查询时间戳
需要查询整个表格并查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之间输入的时间戳。
什么是最好的方法?
谢谢!
我正在查询包含时间戳的表(例如:2011-05-03 09:52:00)。Microsoft SQL查询时间戳
需要查询整个表格并查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之间输入的时间戳。
什么是最好的方法?
谢谢!
SELECT *
FROM YourTable
WHERE DATEPART(hh, YourColumn) BETWEEN 18 AND 20
OP要求“18:00:00至20:00:00之间”。这将包括“20:59:59” – 2011-05-03 16:22:47
@Martin:你是对的。 – 2011-05-03 16:28:13
这一个只会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'
SQL Server中包含'BETWEEN',因此将包含端点。 – 2011-05-03 16:57:12
right - 就是一个例子,所以如果OP不想要18:00,他可以这样做:在'18:00:01'和'19:59:59'之间 – 2011-05-03 16:59:51
尽管看起来第一个答案已经被选中了它为他工作:) – 2011-05-03 17:00:09
对于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))
在该范围的两侧包容性?即您想要时间戳> ='18:00:00'和<='20:00:00'? – 2011-05-03 16:27:38