web-dev-qa-db-fra.com

Tronquer la date à seulement heure/minute

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)

20
pufos
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)
39
Mikael Eriksson

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)
4
SmartestVEGA

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.

0
maniek765