Суворо, метод a
є найменш ресурсоємним:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Доведено, що інтенсивність процесора менша, за однакову загальну тривалість мільйон рядків, якийсь один із занадто великим часом на руках: Найефективніший спосіб у SQL Server отримати дату + час?
Я бачив подібний тест і в інших місцях з подібними результатами.
Я віддаю перевагу DATEADD / DATEDIFF тому, що:
- varchar підлягає проблемам мови / дати Формат
Приклад: Чому мій вираз CASE не детермінований?
- float покладається на внутрішнє зберігання
- він продовжує працювати перший день місяця, завтра тощо, змінюючи базу "0"
Редагувати, жовтень 2011 р
Для SQL Server 2008+ ви можете CAST date
тобто CAST(getdate() AS date)
. Або просто використовувати date
тип даних, щоб не було часу для видалення.
Редагувати, січень 2012 р
Працюючий приклад того, наскільки це гнучко: Потрібно обчислити закруглену цифру часу або дати на сервері sql
Редагувати, травень 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)