DateTime часто представляется в виде дневного отсчета с заданной даты (обычно известной как эпоха) на целой части и процентного дня, прошедшего с середины ночи на дробной части.
SQL Server не является исключением из этого, поэтому преобразование в Float имеет большой смысл. День 0 - 01 января 1900 00:00:00 (AFAIK, в особом часовом поясе, поэтому вы должны считать это «местным временем»).
Таким образом, вы можете попробовать это:
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
Итак, для результатов, 40183 дней был принят, так как 01.01.1900 00:00:00 и 01/07/2010 00:00: 00
Уточнение: системы, подобные Unix, используют другой подход для хранения данных: секунды после эпохи Unix (1 января 1970 года 00:00:00 UTC), которая более известна как время эпохи.
[Изменить] Формат даты в этом ответе был изменен на формат YYYYMMDD на 20140416, после нескольких лет опыта работы с SQL Server (и, как сказал @Damien в своем комментарии) это единственный безопасный формат.
что еще вы ожидали ??? –
Что именно вам нужно сделать? – hgulyan
Я ожидал ошибку, я хочу знать, как она конвертирует datetime в float, внутренне, как это работает. –