Nejlepší způsob je:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Je to proto, že interně SQL Server ukládá všechna data jako dvě celá čísla, z nichž první je ****počet dní*** od 1. ledna 1900. (druhé je časová část, uložená jako počet sekund od půlnoci. (sekundy pro SmallDateTime
s nebo milesekundy pro DateTime
s)
Použití výše uvedeného výrazu je lepší, protože se vyhne všem převodům, přímo čte a přistupuje k prvnímu celému číslu v interní reprezentaci data, aniž by bylo nutné provádět jakékoli zpracování... dvě nuly ve výše uvedeném výrazu (které představují 1 ledna 1900), jsou také přímo využívány bez zpracování nebo konverze, protože odpovídají interní reprezentaci SQL serveru k datu 1. ledna 1900 přesně tak, jak je uvedeno (jako celé číslo)..
*POZNÁMKA. Ve skutečnosti je to počet datových hranic (půlnoc), které musíte překročit, abyste se dostali z jednoho data na druhé.