Най-добрият начин е:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Това е така, защото вътрешно SQL Server съхранява всички дати като две цели числа, първото от които е ****броят дни*** от 1 януари 1900 г. (второто е частта от времето, съхранена като броя на секунди от полунощ. (секунди за SmallDateTime
s или милисекунди за DateTime
s)
Използването на горния израз е по-добро, защото избягва всички преобразувания, директно четене и достъп до това първо цяло число във вътрешно представяне на дати, без да се налага да извършва каквато и да е обработка... двете нули в горния израз (които представляват 1 януари 1900 г.), също се използват директно без обработка или преобразуване, защото съвпадат с вътрешното представяне на SQL сървъра на датата 1 януари 1900 г. точно както е представено (като цяло число)..
*ЗАБЕЛЕЖКА. Всъщност броят на границите на датата (полунощ), които трябва да преминете, за да стигнете от една дата до друга.