Bästa sättet är:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Detta beror på att internt lagrar SQL Server alla datum som två heltal, varav det första är ****antal dagar*** sedan 1 januari 1900. (det andra är tidsdelen, lagrad som antalet sekunder sedan midnatt. (sekunder för SmallDateTime
s, eller millisekunder för DateTime
s)
Att använda uttrycket ovan är bättre eftersom det undviker alla omvandlingar, direkt läsning och åtkomst av det första heltal i en inre datumrepresentation utan att behöva utföra någon bearbetning... de två nollorna i uttrycket ovan (som representerar 1 jan 1900), används också direkt utan bearbetning eller konvertering, eftersom de matchar SQL-serverns interna representation av datumet 1 jan 1900 exakt som presenterat (som ett heltal).
*NOTERA. Faktiskt antalet datumgränser (midnattar) du måste passera för att komma från det ena datumet till det andra.