2011-11-16 6 views
12

In SQL Server 2008, perché le seguenti query restituiscono lo stesso valore?SQL Server 2008 e millisecondi

-- These all return 2011-01-01 23:59:59.997 
SELECT CAST('2011-01-01 23:59:59.997' as datetime) 
SELECT CAST('2011-01-01 23:59:59.998' as datetime) 

E perché la seguente query arriva fino al giorno successivo?

-- Returns 2011-01-02 00:00:00.000 
SELECT CAST('2011-01-01 23:59:59.999' as datetime) 

risposta

25

La precisione di DateTime in SQL Server è sempre stato di 1/300s di secondo (3.33ms), in modo che qualsiasi valore che non divide precisamente viene arrotondato.

  • 997 rimane tale
  • 998 sarà arrotondare a 997
  • 999 sarà arrotondare fino a 000

Per ottenere la precisione in più, c'è il tipo di dati DateTime2, disponibili in SQL Server Dal 2008 in poi, che può essere preciso fino a 7 cifre decimali.

+0

Buono a sapersi ... grazie per la pronta risposta! –

3

La documentazione MSDN per datetime http://msdn.microsoft.com/en-us/library/ms187819.aspx dicono

Tempo gamma == 00:00:00 attraverso 23: 59: 59,997 Precisione == arrotondati a incrementi di .000, .003 o .007 secondi

Nel documento collegato è presente anche una sezione "Arrotondamento della seconda precisione frazionale datetime".

datetime2 offre maggiore precisione.