Этот текст является в какой то мере переводом топика Kevin Jones - Removing time from SQL datetime, так что если вы хорошо знаете английский, то лучше, наверное, читать руководство из первых рук. Правда, мой вариант дополнен некоторыми тестами.
Итак, мы довольно часто используем SQL сервер для хранения данных с типом дата и время. В SQL Server 2005/2000 существуют два типа данных (специальных типов данных) для хранения даты и времени – это datetime и smalldatetime, разница между ними в возможностях хранения (от и до), точности времени и, соответственно, в количестве используемой памяти. В SQL Server 2008 появились дополнительные типы данных, такие как datetime2, time, date, datetimeoffset, о них вы можете прочитать в статье на MSDN - Типы данных и функции даты и времени (Transact-SQL).
Вернемся же к типу DATETIME. Часто возникает необходимость выбрать из типа DATETIME только дату, а время установить равным 0:00. Не приходиться об этом думать, когда нужно просто вывести результат – тогда все можно сделать форматом вывода, например в C# это может быть “dd.MM.yyyy”. Другое дело, если с данными нужно еще оперировать (например, группировать по дате или что то прибавить или убавить), тогда нам необходим тип DATETIME, в котором нам нужно обнулять время.