抱歉,如果在某个地方已经准备好了这个问题,但我一直在努力寻找答案!我有一个日期时间字段,其中包含活动的日期时间戳。
我需要有一个查询,它只带回今天日期和 08:00 到 10:00 之间的事件之间的数据信息。我的大脑说它应该是直截了当的,但我不知道。
谢谢
为了获得特定的时间点,我倾向于使用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。
干得好...
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())
select ...
where dateColumn between
convert(varchar(10), getdate(), 120) + 'T08:00:00'
and convert(varchar(10), getdate(), 120) + 'T10:00:00'