2008-10-30 5 views

Antwort

28

Versuchen Sie, diese Funktion

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) 

Der 1. param wird die Zeit gerundet werden, und die zweite wird Basis auf Ihrer Liste (0,5 halbe Stunde, 1-1 Stunde, ...)

+0

Wenn Sie 121 anstelle von 113 verwendet werden wird es richtig auch – vzczc

+0

leider das Datumsteil erhalten, 121 anstelle von 114 – vzczc

+0

nichts wert, die Schritten als Dezimalzahl angegeben werden Notation von einem Bruchteil einer Stunde. Wenn Sie also wollen, dass es in 5-Minuten-Intervallen gerundet wird, dann ist das 1/12 einer Stunde, also wäre @RoundTo .083. – eidylon

5

Sehr schön danke. Ich benutzte es, in-line bis 15 Minuten runden

convert(smalldatetime,ROUND(cast(TDatalog.Time as float) * (24/.25),0)/(24/.25)) AS RoundedTime