Najlepszy sposób to:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Dzieje się tak, ponieważ wewnętrznie SQL Server przechowuje wszystkie daty jako dwie liczby całkowite, z których pierwsza to ****liczba dni*** od 1 stycznia 1900. (druga to część czasu, przechowywana jako liczba sekund od północy. (sekundy dla SmallDateTime
s lub milisekundy dla DateTime
s)
Użycie powyższego wyrażenia jest lepsze, ponieważ pozwala uniknąć wszystkich konwersji, bezpośrednio odczytując i uzyskując dostęp do pierwszej liczby całkowitej w wewnętrznej reprezentacji dat bez konieczności wykonywania jakiegokolwiek przetwarzania... dwa zera w powyższym wyrażeniu (które reprezentują 1 Styczeń 1900), są również bezpośrednio wykorzystywane bez przetwarzania lub konwersji, ponieważ odpowiadają one wewnętrznej reprezentacji SQL Server daty 1 stycznia 1900 dokładnie tak, jak została przedstawiona (jako liczba całkowita).
*NOTATKA. Właściwie to liczbę granic dat (północy), które musisz przekroczyć, aby przejść z jednej daty na drugą.