TSQL日期条件

TSQL日期条件,sql,tsql,select,Sql,Tsql,Select,我有一个不断更新的事件表,其中有一个datetime列 我想把今天开始的所有活动以及第二天开始8小时的活动都记录下来 我们的想法是,人们不会在半夜里检查事件,所以我们在前一天列出。p> 要获取今天的数据,我需要DATEDIFFday、eventdate、GETDATE=0,但我还没有想出如何为我的案例添加日期。我要么没有排,要么排得太多 因此,想要的结果是: 3月9日00:00至3月10日8:00。仅举个例子最好不要对列进行任何计算。而是计算间隔并获取间隔中的行。这样,您就可以在eventdat

我有一个不断更新的事件表,其中有一个datetime列

我想把今天开始的所有活动以及第二天开始8小时的活动都记录下来

我们的想法是,人们不会在半夜里检查事件,所以我们在前一天列出。p> 要获取今天的数据,我需要DATEDIFFday、eventdate、GETDATE=0,但我还没有想出如何为我的案例添加日期。我要么没有排,要么排得太多

因此,想要的结果是:

3月9日00:00至3月10日8:00。仅举个例子

最好不要对列进行任何计算。而是计算间隔并获取间隔中的行。这样,您就可以在eventdate上使用索引,而不是进行表扫描

select SomeColumns
from YourTable
where eventdate >= dateadd(day, datediff(day, 0, getdate()), 0) and
      eventdate < dateadd(hour, 32, dateadd(day, datediff(day, 0, getdate()), 0))  

您可以使用这些来绑定查询

DECLARE @Start DateTime = CONVERT(nvarchar(10), GetDate(), 121)
DECLARE @End DateTime = DATEADD(Hour, +32, @Start)
这是一个测试脚本

CREATE TABLE #Temp (Column1 DateTime)

INSERT INTO #Temp (column1) values (getdate()) -- it's 6pm now
INSERT INTO #Temp (column1) values (dateadd(hour, -24, getdate())) --6pm yesterday - outside window
INSERT INTO #Temp (column1) values (dateadd(hour, -12, getdate())) --6am today
INSERT INTO #Temp (column1) values (dateadd(hour, -5, getdate())) -- 1pm today
INSERT INTO #Temp (column1) values (dateadd(hour, +12, getdate())) -- 6am tomorrow - inside window
INSERT INTO #Temp (column1) values (dateadd(hour, +17, getdate())) -- 11am tomorrow - outside window

select * from #Temp

DECLARE @Start DateTime = CONVERT(nvarchar(10), GetDate(), 121)
DECLARE @End DateTime = DateAdd(Hour, +32, @Start)

SELECT * FROM #Temp WHERE Column1 > @Start AND Column1 < @End

您也可以这样做:

select *
from yourtable
WHERE EventDate >= Convert(varchar(10), getdate(), 101)
AND EventDate < CAST(Convert(varchar(10), DateAdd(d, 1, getdate()), 101) +  ' 08:00 AM' as datetime)

你可以试试这样的

文档页面显示了您可以使用的小时、天、秒等所有不同的日期部分

DECLARE @StartTimeWindow DATETIME, @EndTimeWindow DATETIME
SET @StartTimeWindow = DATEDIFF(DAY, 0, GETDATE())
SET @EndTimeWindow = DATEADD(HOUR, 32, @StartTimeWindow)

SELECT *
FROM EventTable
WHERE EventDate >= @StartTimeWindow
  AND EventDate <= @EndTimeWindow
select *
from yourtable
WHERE Convert(varchar(10), EventDate, 101) >= Convert(varchar(10), getdate(), 101)
AND EventDate < CAST(Convert(varchar(10), DateAdd(d, 1, getdate()), 101) +  ' 08:00 AM' as datetime)
DECLARE @StartTimeWindow DATETIME, @EndTimeWindow DATETIME
SET @StartTimeWindow = DATEDIFF(DAY, 0, GETDATE())
SET @EndTimeWindow = DATEADD(HOUR, 32, @StartTimeWindow)

SELECT *
FROM EventTable
WHERE EventDate >= @StartTimeWindow
  AND EventDate <= @EndTimeWindow