我有一个事件表,不断更新,有一个日期时间列。
我希望今天开始的所有活动以及第二天开始的8小时活动。
这个想法是人们不会在半夜检查事件,所以我们在前一天列出它们。
为了得到今天,我做DATEDIFF(day,eventdate,GETDATE())=0
但我没有想出如何为我的案件做the dateadd()
。我要么没有行也没有太多。
所以想要的结果是:
From 00:00 on March 9 to 8:00 on March 10.
(仅限示例)
答案 0 :(得分:7)
最好不对您的列进行任何计算。改为计算间隔并获取间隔中的行。这样,您可以在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))
答案 1 :(得分:1)
您可以使用这些来约束您的查询......
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
答案 2 :(得分:1)
SELECT
Column1, Column2
FROM
TableName
WHERE
DateColumm BETWEEN Convert(Date, GETDATE()) AND DateAdd(hh, 32, Convert(smalldatetime, Convert(Date, GETDATE())))
答案 3 :(得分:1)
你也可以这样做:
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)
然后,如果您的EventDate有时间,那么您可以在WHERE
子句的第一部分转换EventDate
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)
答案 4 :(得分:1)
你可以尝试这样的事情。
DateAdd文档页面显示了您可以使用的所有不同日期部分(小时,天,秒等)
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