2011-05-10 25 views
1

在TSQL中,我如何才能獲得前一小時捕捉到的小時。上一小時或TSQL中的X分鐘捕捉到窗口

因此,例如,如果現在是2:33,我如何獲得CreationDate(日期時間字段)大於或等於1:00且小於2:00的字段。

我也想用10分鐘的時間間隔來做到這一點(如果它是當前:如果它是當前:14例如,或另一個例子:50:00,如果它是:06) 。

回答

1

這將讓你當前小時的開始和結束:

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跟上堆棧溢出性能良好的工作!

+0

'的currentdate \t \t LowerDate UpperDate 2011-05-10 20:07:10.243 \t 2011-05-10 20:00:00.000 \t 2011-05-10 20:10:00.000'似乎是當前10分鐘塊 – 2011-05-10 20:07:48

+0

@凱爾布蘭特:對,回答編輯顯示前10分鐘的塊。 – Andomar 2011-05-10 20:10:40

+0

所以只是 - 10第一次,沒有+10下次我想... – 2011-05-10 20:10:42