TSQL 中的前一小时或 X 分钟对齐到窗口



在 TSQL 中,我怎样才能将前一小时捕捉到小时。

因此,例如,如果现在是 2:33,我将如何获得 CreationDate(日期时间字段)大于或等于 1:00 且小于 2:00 的字段。

我还想以 10 分钟的间隔执行此操作(例如,如果当前为 :14,则捕捉到之前的 :00 - :10,或者另一个示例,如果它是 :06,则捕捉到:50-:00)。

这将为您提供当前小时的开始和结束:

select  dateadd(hour, datepart(hour, getdate()), 
            dateadd(day, 0, datediff(day, 0, getdate())))
,       dateadd(hour, 1+datepart(hour, getdate()), 
            dateadd(day, 0, datediff(day, 0, getdate())))

解释:dateadd(day, 0, datediff(day, 0, getdate()))让你开始今天的开始。 然后,您将当前小时添加到其中。

与前 10 分钟块相同:

select  dateadd(minute, datepart(minute, getdate()) / 10 * 10 - 10, 
            dateadd(hour, datepart(hour, getdate()), 
                dateadd(day, 0, datediff(day, 0, getdate()))))
,       dateadd(minute, datepart(minute, getdate()) / 10 * 10, 
            dateadd(hour, datepart(hour, getdate()), 
                dateadd(day, 0, datediff(day, 0, getdate()))))

或者另一种写法:

declare @lowerBound datetime = dateadd(minute, datepart(minute, getdate()) / 10 * 10 - 10, 
            dateadd(hour, datepart(hour, getdate()), 
                dateadd(day, 0, datediff(day, 0, getdate()))))
declare @upperBound datetime = dateadd(minute, datepart(minute, getdate()) / 10 * 10, 
            dateadd(hour, datepart(hour, getdate()), 
                dateadd(day, 0, datediff(day, 0, getdate()))))
select @lowerBound, @upperBound

PS继续保持堆栈溢出性能的良好工作!

最新更新