2015-08-12 13 views
7

Das ist mein Grund "test"DATEADD MS -1 tut nichts

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 

Ich verstehe ich versuche, warum MS-2, subtrahiert 3 und MS -1 subtrahiert keine.

Antwort

12

Der MSSQL-Datentyp datetime hat eine feinste Granularität von .00333333s (Wiederholung) oder etwa 3 Millisekunden. Änderungen weniger als das führt entweder zu keiner Änderung oder abgerundet 3.

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

datetime2 (3) hat eine Genauigkeit von einer Millisekunde, und Datetime hat eine Präzision von 1/300 eine Sekunde.