2011-05-10 3 views
1

TSQL에서 이전 시간을 어떻게 시간당 가져올 수 있습니까?이전 시간 또는 TSQL의 X 분 창으로 스냅

예를 들어, 현재 2:33이면 CreationDate (datetime 필드)이 1:00 이상 2:00 미만인 필드를 얻는 방법은 무엇입니까?

10 분 간격으로 이전 작업을 수행하고 싶습니다 (예 : 14 일 경우 예 : 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())) 당신에게 오늘의 시작을 가져옵니다. 그런 다음 현재 시간을 추가합니다. 이전 십분 블록의 같은 라인을 따라

:

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 LowerDate \t 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 분 블록이 될 것 같다 –

+0

@Kyle Brandt : 대답, 지난 10 분간의 블록을 보여주기 위해 편집되었습니다. – Andomar

+0

그럼 처음에는 10 번, 다음에 생각하면 다음 번에 +102 ... –

관련 문제