很抱歉,如果这个问题已经在某个地方被问到了,但我一直在努力寻找答案!我有一个日期时间字段,是活动的日期时间戳。
我需要一个查询,它只返回今天日期和事件之间08:00到10:00之间的数据的信息。我的大脑说它应该是直截了当的,但我不能理解。
谢谢
发布于 2013-04-30 18:53:54
给你..。
SELECT * FROM <TABLE_NAME> WHERE EVENTS_DATE BETWEEN
DATEADD(hour, 8, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0))
AND
DATEADD(hour, 10, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0))如果在TSQL中使用变量,则将今天日期存储在该变量中
DATEADD(day, DATEDIFF(day, 0, GETDATE())发布于 2013-04-30 18:54:47
为了获得特定的时间点,我倾向于使用DATEADD/DATEDIFF模式。它可能看起来有点笨拙,但性能相当不错,一旦你习惯了它,它就会变得更具可读性:
SELECT * --TODO - Pick columns
FROM Activities
WHERE OccurredAt BETWEEN
DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00') AND
DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T10:00:00')在这里,我使用了两次。它只依赖于您选择的两个日期常量之间的关系,因为它们展示了您想要的特性。所以这里:
DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00')我正在计算从2001年1月1日到现在已经过去的(完整)天数。然后我将这个(整数)天数添加到2001年1月1日的08:00 -从逻辑上讲,这将是今天的08:00。
发布于 2013-04-30 18:49:38
select ...
where dateColumn between
convert(varchar(10), getdate(), 120) + 'T08:00:00'
and convert(varchar(10), getdate(), 120) + 'T10:00:00'https://stackoverflow.com/questions/16297801
复制相似问题