0

抱歉,如果在某个地方已经准备好了这个问题,但我一直在努力寻找答案!我有一个日期时间字段,其中包含活动的日期时间戳。

我需要有一个查询,它只带回今天日期和 08:00 到 10:00 之间的事件之间的数据信息。我的大脑说它应该是直截了当的,但我不知道。

谢谢

4

3 回答 3

2

为了获得特定的时间点,我倾向于使用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-30T10:54:47.417 回答
1

干得好...

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-30T10:53:53.750 回答
0
select ...
where dateColumn between 
  convert(varchar(10), getdate(), 120) + 'T08:00:00' 
  and convert(varchar(10), getdate(), 120) + 'T10:00:00'
于 2013-04-30T10:49:38.113 回答