sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo funciona la función de conversión de SQL al convertir datetime a float?

DateTime a menudo se representa como un conteo de días desde una fecha predeterminada (generalmente conocida como la época) en la parte entera y el porcentaje del día transcurrido desde la medianoche 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 01 de enero de 1900 a las 00:00:00 (AFAIK, en ninguna zona horaria en particular, por lo que debe considerarlo como "hora local").

Entonces, puedes 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 = '19001231 06:00:00';
select CONVERT(float, @ADate);  --should print 364.25

Entonces, para sus resultados, han pasado 40183 días desde el 01/01/1900 00:00:00 y el 07/01/2010 00:00:00

Aclaración:los sistemas similares a Unix utilizan un enfoque diferente para almacenar fechas y horas:segundos desde la época de Unix (1 de enero de 1970 00:00:00 UTC), que se conoce más como época de época.

[Editar] El formato de fecha en esta respuesta se cambió al formato AAAAMMDD 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.