Tsql 获取时间间隔的日期

Tsql 获取时间间隔的日期,tsql,getdate,Tsql,Getdate,对不起,如果有人问这个问题,我已经准备好了,但我一直在努力寻找答案!我有一个日期时间字段,它是活动上的日期时间戳 我需要一个查询,只返回今天的日期和08:00到10:00之间的事件之间的数据信息。我的大脑说应该是直接的,但我不能接受 谢谢给你 SELECT * FROM <TABLE_NAME> WHERE EVENTS_DATE BETWEEN DATEADD(hour, 8, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND

对不起,如果有人问这个问题,我已经准备好了,但我一直在努力寻找答案!我有一个日期时间字段,它是活动上的日期时间戳

我需要一个查询,只返回今天的日期和08:00到10: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))
给你

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))

为了获得特定的时间点,我倾向于使用
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。

为了得到一个特定的时间点,我倾向于使用
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。

您尝试过使用BETWEEN吗?更多的是询问如何使用BETWEEN Getdate()08:00:00和Getdate()10:00:00。我需要它来获取当前日期,并且只返回这两次之间的数据。您是否尝试使用between?更多的是查询如何使用between Getdate()08:00:00和Getdate()10:00:00。我需要它来获取当前日期,并且只返回这两次之间的数据。完美!!工作是一种享受!!谢谢你,奈特!完美的工作是一种享受!!谢谢你,奈特!这在+1时效果很好。但是,当默认日期格式更改时,不确定该如何更改。@indownight-我显示的日期/日期时间常量的格式与它们的格式相同,因为无论使用何种格式设置,它们都保证有效(即,对于没有时间的日期,
YYYYMMDD
保证解释正确。对于有时间的日期,您必须移动到包含破折号/冒号,并使用
T
分隔日期和时间)是否有任何理由在时间之前使用
T
而不是空格?ODBC标准格式使用空格。@Aryadev-
设置英国语言;选择DATEPART(月,转换(datetime,'2001-01-02 08:00:00');
。结果:
2
。(在文本转换为
datetime2
而不是
datetime
之前的版本中,您可能会错过
CONVERT()
调用)。尽管英国没有人(据我所知)预计将被解释为2月1日。这在+1时运行良好。但是,不确定当默认日期格式更改时如何执行。@IndowKnight-我显示的日期/日期时间常量按原样格式化,因为无论使用何种格式设置,它们都保证工作(即,对于没有时间的日期,
YYYYMMDD
保证解释正确。对于有时间的日期,您必须移动到包含破折号/冒号,并使用
T
分隔日期和时间)是否有任何理由在时间之前使用
T
而不是空格?ODBC标准格式使用空格。@Aryadev-
设置英国语言;选择DATEPART(月,转换(datetime,'2001-01-02 08:00:00');
。结果:
2
。(在文本转换为
datetime2
而不是
datetime
之前的版本中,您可能会错过
CONVERT()
调用)。尽管事实上,英国没有人(据我所知)希望将其解释为2月1日。