2015-08-12 7 views
7

Questo è il mio "test" di baseDATEADD MS -1 non fa nulla

select DATEADD(ms,-2,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)) 
     , DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) 
     ,case when DATEADD(ms,-2,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)) != DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) then 'No Match' else 'Match' end 
union all 
select DATEADD(ms,-1,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)) 
     ,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) 
     ,case when DATEADD(ms,-1,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)) != DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) then 'No Match' else 'Match' end 

Sto cercando di capire perché MS -2, sottrae 3 e MS -1 sottrae nessuno.

risposta

12

Il tipo di dati MSSQL datetime ha una granularità più fine di .00333333s (ripetuta), o circa 3 millisecondi. Cambiamenti inferiore a quella comporterà sia alcun cambiamento, o arrotondato a 3.

Da https://msdn.microsoft.com/en-us/library/cc280460.aspx

datetime2 (3) presenta una precisione di un millisecondo, e datetime ha un precisione di 1/300 di un secondo.