Строго, метод 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
тип данни, така че няма time
за премахване.
Редактиране, януари 2012 г.
Работен пример за това колко гъвкаво е това:Необходимо е да се изчисли по закръглена цифра за час или дата в sql сървър
Редактиране, май 2012 г.
Не използвайте това в клаузи WHERE и други подобни без да се замислите:добавянето на функция или CAST към колона обезсилва използването на индекс. Вижте номер 2 тук Често срещани грешки при програмиране на 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)