Строго говоря, метод a
является наименее ресурсоемким:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Доказано, что процессор менее загружен при той же общей продолжительности миллион строк кем-то, у кого слишком много времени: Самый эффективный способ в SQL Server получить дату от даты + время?
Я видел аналогичный тест в другом месте с аналогичными результатами.
Я предпочитаю DATEADD / DATEDIFF, потому что:
- varchar подвержен проблемам с языковым форматом / форматом даты
Пример: Почему мое выражение CASE недетерминировано? - float зависит от внутреннего хранилища
- он распространяется на первый день месяца, завтра и т. Д., Изменяя базовую «0»
Редактировать, октябрь 2011
Для SQL Server 2008+, вы можете CAST к date
. Или просто используйте date
, чтобы не было времени удалить.
Редактировать, январь 2012
Рабочий пример того, насколько это гибко: Необходимо рассчитать поокругленное значение времени или даты на сервере sql
Edit, May 2012
Не используйте это в предложениях WHERE и т. п., не задумываясь: добавляя функцию илиCAST к столбцу делает недействительным использование индекса. Смотрите номер 2 здесь: http://www.simple -talk.com / sql / t-sql-программирование / десять-общих-sql-программирование-ошибок /
Теперь у этого есть примерболее поздние версии оптимизатора SQL Server, управляющие CAST, корректно обновляются, но обычно будет плохой идеей ...
Редактировать, сентябрь 2018 г., для datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)