很抱歉,如果有人问过这个问题已经准备好了,但我很难找到答案!我有一个日期时间字段,是活动的日期时间戳。
我需要一个查询,它只会在今天的日期和08:00到10:00之间的事件之间收回数据信息。我的大脑说它应该是直截了当但我无法理解它。
由于
答案 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'