Sql 如何使用If和Else检查小时数并运行特定查询

Sql 如何使用If和Else检查小时数并运行特定查询,sql,sql-server,if-statement,Sql,Sql Server,If Statement,我希望使用IF/ELSE或CASE函数来编写特定的代码。我想让它检查一个名为DATEMODIFIED的列,看看现在是几点。所以基本上我想获取从1800点到第二天早上06点的数据。我打算用 WHERE(DATEADD(hour,-12,GETDATE())和DATEADD(day,0,GETDATE())之间的日期修改) 但这将追溯到查询运行时的12个小时。我不希望它在1800小时后提取数据。假设它在2200小时运行,我想让它回顾4个小时并运行一个特定的查询。如果它在第二天凌晨两点运行,我希望它只

我希望使用IF/ELSE或CASE函数来编写特定的代码。我想让它检查一个名为DATEMODIFIED的列,看看现在是几点。所以基本上我想获取从1800点到第二天早上06点的数据。我打算用
WHERE(DATEADD(hour,-12,GETDATE())和DATEADD(day,0,GETDATE())之间的日期修改)
但这将追溯到查询运行时的12个小时。我不希望它在1800小时后提取数据。假设它在2200小时运行,我想让它回顾4个小时并运行一个特定的查询。如果它在第二天凌晨两点运行,我希望它只回顾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()))
然后使用
dbo.PreviousDateHour(GetDate(),18)
获取所需的日期

例如:

如果您使用的是SQL 2012,则可能会使函数更简单

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')
然后使用
dbo.PreviousDateHour(GetDate(),18)
获取所需的日期

例如:


如果您使用的是SQL 2012,那么可能会使函数更简单。

现在,如果我想将其用于反向(6a-6p),我可以将18:00更改为06:00,将06:00更改为18:00,对吗?我不必更改-18?@user1800374,我现在无法测试,但请尝试以下操作:dateadd(day,datediff(day,0,dateadd(hour,-6,getdate()),'1900-01-01 6:00')和dateadd(day,datediff(day,0,dateadd(hour,-6,getdate()),'1900-01-01 18:00')是的!对不起,我是这个网站的新手。不过我很喜欢!我把复选标记放在它旁边。这样做对了吗?现在如果我想用这个做反面(6a-6p),我可以把18:00改成06:00,06:00改成18:00,对吗?我不必更改-18?@user1800374,我现在无法测试,但请尝试以下操作:dateadd(day,datediff(day,0,dateadd(hour,-6,getdate()),'1900-01-01 6:00')和dateadd(day,datediff(day,0,dateadd(hour,-6,getdate()),'1900-01-01 18:00')是的!对不起,我是这个网站的新手。不过我很喜欢!我把复选标记放在它旁边。这样做对吗?
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')