2011-11-16 24 views
12

En SQL Server 2008, ¿por qué las siguientes consultas devuelven el mismo valor?SQL Server 2008 y milisegundos

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

¿Y por qué la consulta siguiente ronda al día siguiente?

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

Respuesta

25

La precisión de DateTime en SQL Server siempre ha sido la de 1/300s de segundo (3.33ms), por lo que cualquier valor que no divide precisamente se redondeado.

  • 997 se queda como está
  • 998 redondeará a 997
  • 999 redondeará hasta 000

Para obtener una precisión adicional, no es el tipo de datos DateTime2, disponible en SQL Server 2008 en adelante, que puede tener una precisión de 7 decimales.

+0

Es bueno saber ... gracias por la pronta respuesta! –

3

Los docs MSDN para fecha y hora en http://msdn.microsoft.com/en-us/library/ms187819.aspx dicen

Tiempo gama == 00:00:00 a través de 23: 59: 59.997 Precisión == redondeadas a incrementos de 0,000, .003, o 0,007 segundos

En el documento vinculado también hay una sección "Redondeo de la segunda precisión fraccional de fecha y hora".

datetime2 le da más precisión.

Cuestiones relacionadas