Il modo migliore è:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Questo perché internamente, SQL Server archivia tutte le date come due interi, di cui il primo è il ****numero di giorni*** dal 1 gennaio 1900. (il secondo è la parte temporale, memorizzata come numero di secondi da mezzanotte. (secondi per SmallDateTime
s o millesecondi per DateTime
s)
Utilizzare l'espressione sopra è meglio perché evita tutte le conversioni, leggendo e accedendo direttamente a quel primo intero in una rappresentazione interna di date senza dover eseguire alcuna elaborazione... i due zeri nell'espressione sopra (che rappresentano 1 gennaio 1900), sono anche utilizzati direttamente senza elaborazione o conversione, perché corrispondono alla rappresentazione interna del server SQL della data 1 gennaio 1900 esattamente come presentata (come numero intero)..
*NOTA. In realtà, il numero di limiti di date (mezzanotte) che devi attraversare per passare da una data all'altra.