2012-12-06 4 views
2

나는 datetime을 가장 가까운 1/4 시간으로 반올림하는 함수가 있습니다. 대신 가장 가까운 분기로 반올림하는 방법이 있습니까?1/4 분으로 반올림하는 datetime

예.

08:14:00 becomes 08:00:00 
08:03:00 becomes 08:00:00 
08:29:00 becomes 08:15:00 
08:55:00 becomes 08:45:00 

이것은 가장 가까운 쿼터로 반올림했습니다.

(
@dt datetime 
) 
returns datetime 
as 
begin 
declare @result datetime 
declare @mm int 
set @mm=datepart(minute,@dt) 
set @result = dateadd(minute,[email protected] + (round(@mm/cast(15 as float),0)*15) , @dt) 

return @result 
+1

왜 귀하의 질문에 vb.net 태그가 지정되어 있습니까? 나는 VB의 관련성에 대한 어떤 언급도 보지 못했다. * VB * 나 * SQL에서 사용할 수있는 솔루션을 요구한다면, 명시 적으로 언급해야한다. –

+0

예 .. 죄송합니다, 당신 말이 맞습니다. VB와 관련이 없습니다 .. VB 태그를 제거했습니다. 가리키는 주셔서 감사합니다 ... – Bladefreak

답변

1

사용하여 SQL 서버 :

select cast( 
     FLOOR(cast(GetDate() as float)*(24*4))/(24*4) 
     as smalldatetime) AS "datetime_quarter" 

전략은 다음과 같습니다

  • 는 분기
  • 의 수를 얻기 위해 시간, *4를 얻기 위해, 부동 소수점 번호로 *24를 날짜로 변환
  • 반올림 함께 FLOOR
  • 날짜 수로 변환 /(24*4)
  • 일 수를 datetime으로 변환합니다. smalldatetime은 부동 소수점 올림 문제를 방지하는 데 사용됩니다.

이 값은 ROUND 또는 CEILING 대신 쉽게 조정할 수 있습니다. 또는 4 (분기) 대신 다른 시간 배수를 사용하십시오.

+0

감사합니다! .. 매우 도움이되었습니다. – Bladefreak

관련 문제