Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como a função convert do SQL funciona ao converter datetime para float?


DateTime é frequentemente representado como uma contagem de dias a partir de uma data pré-determinada (geralmente conhecida como época) na parte inteira e a porcentagem do dia decorrido desde a meia-noite na parte fracionária.

O SQL Server não é exceção a isso, portanto, a conversão para Float faz muito sentido. O dia 0 é 01 de janeiro de 1900 00:00:00 (AFAIK, em nenhum fuso horário específico, então você deve considerar "hora local").

Então, você pode tentar isso:
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

Portanto, para seus resultados, 40183 dias se passaram desde 01/01/1900 00:00:00 e 01/07/2010 00:00:00

Esclarecimento:Sistemas semelhantes ao Unix usam uma abordagem diferente para armazenar data e hora:Segundos desde a época do Unix (1 de janeiro de 1970 00:00:00 UTC), que é mais conhecida como hora da época.

[Edit]O formato de data nesta resposta foi alterado para o formato AAAAMMDD em 20140416, após alguns novos anos de experiência com o SQL Server (e como @Damien disse em seu comentário) este é o único formato seguro.