我希望使用IF / ELSE或CASE函数来编写特定代码。我想让它检查一个名为DATEMODIFIED的列,看看它是几小时。所以基本上我想要从第二天早上1800到0600的数据中获取数据。我打算用
WHERE (Datemodified BETWEEN DATEADD(hour, - 12, GETDATE()) AND DATEADD(day, 0, GETDATE()))
但是当查询运行时,这将返回12小时。我不希望它在1800小时后提取数据。所以说它在2200小时运行,我希望它回顾4小时并运行一个特定的查询。如果它在第二天早上0200跑,我希望它只回顾8小时。我正在搞乱IF / ELSE并且没有成功。
以下是我一直在使用的查询,但就像我说的那样,它会在超过1800小时的时间内提取信息,具体取决于它的运行时间。此查询仅设计为在早上6点运行,这将获取12小时的数据(1800-0600小时)。如果可以的话请帮忙!谢谢大家!!
SELECT Assignment
, Datemodified
, General
, IncNumber
, NextSteps
, PDCRStatus
, RootCause
, Status
, Summary
, Timings
, UserID
FROM Turnover
WHERE (Datemodified BETWEEN DATEADD(hour, - 12, GETDATE()) AND DATEADD(day, 0, GETDATE()))
答案 0 :(得分:1)
Create Function dbo.PreviousDateHour (@RefDate as datetime, @Hour as int) Returns DateTime As
Begin
Declare @ret datetime = null
If @Hour Is Not Null And @RefDate Is Not Null
Begin
Set @ret = DateAdd(Day, DateDiff(Day, 0, @RefDate), 0) -- truncate to 00:00:00
Set @ret = DateAdd(Hour, @Hour, @ret) -- Set correct hours
If @ret > @RefDate
Set @ret = DateAdd(Day, -1, @ret)
End
Return @ret
End
然后使用dbo.PreviousDateHour(GetDate(), 18)
获取您想要的日期。
示例:http://sqlfiddle.com/#!3/b264d/1
如果您使用的是SQL 2012,则DateTimeFromParts可能会使该功能更简单。
答案 1 :(得分:0)
select ... from Turnover
where Datemodified between
dateadd(day, datediff(day, 0,dateadd(hour, -18, getdate())), '1900-01-01 18:00')
and dateadd(day, datediff(day, 0,dateadd(hour, -18, getdate())), '1900-01-02 06:00')