Cara terbaik adalah:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Ini karena secara internal, SQL Server menyimpan semua tanggal sebagai dua bilangan bulat, yang pertama adalah ****jumlah hari*** sejak 1 Jan 1900. (Yang kedua adalah porsi waktu, disimpan sebagai jumlah detik sejak Tengah Malam. (detik untuk SmallDateTime
s, atau milidetik untuk DateTime
s)
Menggunakan ekspresi di atas lebih baik karena menghindari semua konversi, langsung membaca dan mengakses bilangan bulat pertama dalam representasi internal tanggal tanpa harus melakukan pemrosesan apa pun... dua nol dalam ekspresi di atas (yang mewakili 1 Jan 1900, juga langsung digunakan tanpa pemrosesan atau konversi, karena mereka cocok dengan representasi internal SQL server dari tanggal 1 Januari 1900 persis seperti yang disajikan (sebagai bilangan bulat)..
*CATATAN. Sebenarnya, jumlah batas tanggal (tengah malam) yang harus Anda lewati untuk berpindah dari satu tanggal ke tanggal lainnya.