Строго говоря, метод a
является наименее ресурсоемким:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Доказано, что процессор требует меньше ресурсов при той же общей продолжительности - миллион строк, причем слишком много времени у них на руках: самый эффективный способ в SQL Server получить дату от даты + время?
Я видел аналогичный тест в другом месте с аналогичными результатами тоже.
Я предпочитаю DATEADD / DATEDIFF, потому что:
- varchar подвержен проблемам с языком / форматированием даты.
Пример: почему мое выражение CASE недетерминировано?
- float полагается на внутреннюю память
- он распространяется на первый день месяца, завтра и т. д., изменяя базу на 0
Редактировать, октябрь 2011
Для SQL Server 2008+, можно заливать в date
то есть CAST(getdate() AS date)
. Или просто используйте date
тип данных, поэтому нет времени, чтобы удалить.
Редактировать, январь 2012
Работающий пример того, насколько это гибко: нужно рассчитать по округленному времени или дате в SQL Server
Редактировать, май 2012
Не используйте это в предложениях WHERE и тому подобном, не задумываясь: добавление функции или CAST к столбцу делает недействительным использование индекса. Смотрите номер 2 здесь: http://www.simple-talk.com/sql/t-sql-programming/ten-common-sql-programming-mistakes/
Теперь есть пример более поздних версий оптимизатора 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)