Pergunta

I'me procurando uma função que receberia um momento e gostaria de arredondar para o próximo / hora anterior / meia-hora / trimestre / minuto.

Foi útil?

Solução

Tente esta função

CREATE FUNCTION [dbo].[RoundTime] (@Time datetime, @RoundTo float)
RETURNS datetime
AS
BEGIN
   DECLARE @RoundedTime smalldatetime
   DECLARE @Multiplier float

   SET @Multiplier= 24.0/@RoundTo

   SET @RoundedTime= ROUND(CAST(CAST(CONVERT(varchar,@Time,121) AS datetime) AS float) * @Multiplier,0)/@Multiplier

   RETURN @RoundedTime
END



select dbo.roundtime('13:15',0.5)

O primeiro parâmetro é o momento de ser arredondado e 2º será de base em sua lista (0,5-meia hora, 1-uma hora, ...)

Outras dicas

Muito bom obrigado. Usei-in-line para arredondar para 15 minutos

convert(smalldatetime,ROUND(cast(TDatalog.Time as float) * (24/.25),0)/(24/.25)) AS RoundedTime
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top