DateTime a menudo se representa como un recuento diario de una fecha predeterminada (generalmente conocida como la época) en la parte entera y el porcentaje del día transcurrido desde la mitad de la noche en la parte fraccionaria.
SQL Server no es la excepción a esto, por lo que la conversión a Float tiene mucho sentido. El día 0 es el 1 de enero de 1900 00:00:00 (AFAIK, en ninguna zona horaria en particular, por lo que debe considerarlo como "hora local").
Por lo tanto, se puede probar esto:
declare @ADate DateTime;
set @ADate = '19000101 00:00:00';
select CONVERT(float, @ADate); --should print 0
set @ADate = '19000101 12:00:00';
select CONVERT(float, @ADate); --should print 0.5
set @ADate = '190:00:00';
select CONVERT(float, @ADate); --should print 364.25
Así que, por sus resultados, 40183 días ha pasado desde 01/01/1900 00:00:00 01/07/2010 00:00 y: 00
Aclaración: los sistemas tipo Unix usan un enfoque diferente para almacenar las fechas: segundos desde la época de Unix (1 de enero de 1970 a las 00:00:00 UTC), que es más conocido como tiempo de época. [Editar] El formato de fecha en esta respuesta se cambió al formato YYYYMMDD en 20140416, después de algunos años de experiencia con SQL Server (y como dijo @Damien en su comentario) este es el único formato seguro.
¿qué más esperabas ??? –
¿qué es exactamente lo que necesita hacer? – hgulyan
esperaba el error, quiero saber cómo se convierte datetime para flotar, internamente cómo funciona. –