Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona la funzione di conversione di SQL durante la conversione di datetime in float?

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.