2008-10-30 11 views

Répondre

28

Essayez cette fonction

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) 

Le 1er PARAM est le temps d'arrondi et la 2ème sera la base sur votre liste (0,5 demi-heure, 1 une heure, ...)

+0

Si vous utilisez 121 à la place de 113, il obtiendra le datepart correct aussi – vzczc

+0

Désolé, 121 au lieu de 114 – vzczc

+0

ne vaut rien que par incréments doivent être spécifiés en décimal notation d'une fraction d'heure. Donc, si vous voulez qu'il soit arrondi à des intervalles de 5 minutes, alors cela fait 1/12 d'heure, donc @RoundTo serait .083. – eidylon

5

Très bien merci. Je l'ai utilisé en ligne pour arrondir à 15 minutes

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