2008-10-30 15 views

Odpowiedz

28

Spróbuj funkcję

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) 

The 1st param jest czas, aby być zaokrąglone i 2nd będzie bazowy na liście (0,5-pół godziny, 1-godzinnym, ...)

+0

Jeśli używasz 121 zamiast 113 będzie uzyskać datepart poprawnego również – vzczc

+0

Niestety, 121 zamiast 114 – vzczc

+0

nic nie warte, że przyrosty musi być określony jako przecinku notacja o ułamku godziny. Więc jeśli chcesz zaokrąglić do 5-minutowych interwałów, to jest to 1/12 godziny, więc @RoundTo będzie .083. – eidylon

5

Bardzo miłe dzięki. Używałem go w linii zaokrąglić do 15 minut

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