Я думаю, что вы имеете в виду cast(floor(cast(getdate()as float))as datetime)
real только 32-битный, и может потерять некоторую информацию
Это самый быстрый cast(cast(getdate()+x-0.5 as int)as datetime)
... хотятолько примерно на 10% быстрее (about 0.49 microseconds CPU vs. 0.58)
Это было рекомендовано и сейчас в моем тесте занимает то же время: DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
В SQL 2008 функция SQL CLR примерно в 5 разбыло бы быстрее, чем использование функции SQL, при 1,35 микросекундах по сравнению с 6,5 микросекундами, что указывает на гораздо меньшую нагрузку при вызове функции для функции SQL CLR по сравнению с простой UDF SQL.
В SQL 2005 функция SQL CLR равна 16в моем тестировании, в разы быстрее, чем эта медленная функция:
create function dateonly ( @dt datetime )
returns datetime
as
begin
return cast(floor(cast(@dt as float))as int)
end