表A,OrderId,OrderTimeStamp(datetime)列。
我想选择任何日期的所有记录,例如在上午10点到下午1点之间。
我该怎么做?
谢谢!
答案 0 :(得分:19)
declare @t table(d datetime)
insert @t values('2012-01-01 09:00'),('2012-01-01 10:00'),('2012-01-01 11:00')
select cast(d as time) from @t where cast(d as time) between '10:00' and '13:00'
答案 1 :(得分:4)
在T-SQL DatePart
中可以解决问题:
从10:00
- 12:59
获取所有记录:
SELECT *
FROM TableA
WHERE DATEPART(hh, [OrderTimeStamp]) >= 10 AND DATEPART(hh, [OrderTimeStamp]) < 13
或者如果你想从10:00
- 13:00
获取所有记录(省略秒/毫秒):
SELECT *
FROM TableA
WHERE DATEPART(hh, [OrderTimeStamp]) >= 10 AND DATEPART(hh, [OrderTimeStamp]) < 13
OR (DATEPART(hh, [OrderTimeStamp]) = 13 AND DATEPART(mi, [OrderTimeStamp]) = 0)
请注意,与DatePart
格式一起使用时,hh
函数会返回24h值。
有关详细信息,请参阅此处:
http://msdn.microsoft.com/en-us/library/ms174420.aspx
更新
由于ouy正在使用SQL 2008,您可以使用TIME
数据类型并使查询更简单(也更正确):
SELECT *
FROM TableA
WHERE CONVERT(TIME(7), [OrderTimeStamp ]) >= '10:00:00.0000000'
AND CONVERT(TIME(7), [OrderTimeStamp ]) <= '13:00:00.0000000'
有关详细信息,请参阅此处:
http://msdn.microsoft.com/en-us/library/bb677243.aspx
答案 2 :(得分:2)
select *
from TableA
where datepart(hh, OrderTimeStamp) >= 10 and datepart(hh, OrderTimeStamp) < 13
更新
是的,ntziolis击败了我30秒。有一点需要注意,如果你想要包括下午1点,一定要确定where&lt; =的最后一部分。如果你想只到12:59.999 pm&lt;是合适的。答案 3 :(得分:2)
select *
from tableA
where datepart(hh, OrderTimeStamp) between 10 and 13
如果您需要按分钟过滤(例如13:20和14:15),请尝试this链接上的建议