DateTime è spesso rappresentato come un conteggio dei giorni da una data predeterminata (generalmente nota come epoca) sulla parte intera e la percentuale del giorno trascorso da mezzanotte sulla parte frazionaria.
SQL Server non fa eccezione, quindi la conversione in Float ha molto senso. Il giorno 0 è il 1 gennaio 1900 00:00:00 (AFAIK, in nessun fuso orario particolare, quindi lo consideri "ora locale").
Quindi, puoi provare questo:
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 = '19001231 06:00:00';
select CONVERT(float, @ADate); --should print 364.25
Quindi, per i tuoi risultati, sono trascorsi 40183 giorni dal 01/01/1900 00:00:00 e 07/01/2010 00:00:00
Chiarimento:i sistemi simili a Unix utilizzano un approccio diverso per memorizzare datetime:Secondi dall'epoca di Unix (1 gennaio 1970 00:00:00 UTC), che è più noto come tempo dell'epoca.
[Modifica]Il formato della data su questa risposta è stato modificato nel formato AAAAMMGG il 20140416, dopo alcuni nuovi anni di esperienza con SQL Server (e come ha detto @Damien nel suo commento) questo è l'unico formato sicuro.