两次之间的相互关系

时间:2013-04-30 10:34:42

标签: tsql getdate

很抱歉,如果有人问过这个问题已经准备好了,但我很难找到答案!我有一个日期时间字段,是活动的日期时间戳。

我需要一个查询,它只会在今天的日期和08:00到10:00之间的事件之间收回数据信息。我的大脑说它应该是直截了当但我无法理解它。

由于

3 个答案:

答案 0 :(得分: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生成。

答案 1 :(得分: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())

答案 2 :(得分:0)

select ...
where dateColumn between 
  convert(varchar(10), getdate(), 120) + 'T08:00:00' 
  and convert(varchar(10), getdate(), 120) + 'T10:00:00'