Comment puis-je tronquer la date dans SQL Server 2008 comme ceci:
J'ai 2012-01-02 12:04:11.443
et je veux seulement sélectionner 2012-01-02 12:00:00.000
et 2012-01-02 12:04:00.000
(niveau heure et minute)
declare @D as datetime = '2012-01-02T12:04:11.443'
select dateadd(hour, datediff(hour, 0, @D), 0)
select dateadd(minute, datediff(minute, 0, @D), 0)
Cela semble fonctionner:
select [Rounded Time] =
dateadd(mi,datediff(mi,0,dateadd(ss,30,a.DT)),0)
from
(
select dt = convert(datetime,'8:24:29.997')
union all
select dt = convert(datetime,'8:24:30.000')
) a
Résultats:
Rounded Time
------------------------------------------------------
1900-01-01 08:24:00.000
1900-01-01 08:25:00.000
(2 row(s) affected)
J'utilise quelque chose comme ça:
DATEADD(hour,DATEDIFF(hour,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00')
Vous pouvez utiliser cette formule pour tronquer à d'autres niveaux, à savoir minutes:
DATEADD(minutes,DATEDIFF(minutes,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00')
Vous devez vous rappeler que si vous tronquez au niveau des secondes, la différence maximale entre la date de base et [horodatage] est de 68 ans.