Cara paling masuk akal untuk melakukannya adalah dengan menghapus bagian waktu dari nilai datetime dan membandingkan hasilnya, dan cara terbaik untuk menghapus bagian waktu dari sebuah datetime adalah seperti ini:
cast(current_timestamp as date)
Saya dulu menggunakan dan menganjurkan proses yang tampak seperti salah satu dari dua baris berikut:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Tapi sekarang Sql Server memiliki Date
jenis, yang tidak memiliki komponen waktu, ada sedikit alasan untuk menggunakan salah satu dari teknik tersebut.
Satu hal lagi yang perlu diingat adalah ini masih akan menghambat kueri jika Anda perlu melakukannya untuk dua nilai datetime untuk setiap baris dalam klausa where atau kondisi join. Jika memungkinkan, Anda ingin memfaktorkan hal ini entah bagaimana jadi itu sudah dihitung sebelumnya sebanyak mungkin, misalnya menggunakan tampilan atau kolom yang dihitung.
Terakhir, perhatikan fungsi DATEDIFF membandingkan jumlah batas yang dilintasi. Ini berarti tanggal dalam hari antara '2009-09-14 11:59:59'
dan '2009-09-15 00:00:01'
adalah 1, meskipun hanya 2 detik telah berlalu, tetapi DATEDIFF dalam hari antara '2009-09-15 00:00:01'
dan '2009-09-15 11:59:59'
masih nol, meskipun 86.398 detik telah berlalu. Itu tidak terlalu peduli sama sekali tentang porsi waktu di sana, hanya batas-batasnya. Bergantung pada apa yang coba dilakukan kueri Anda, Anda mungkin dapat menggunakannya untuk keuntungan Anda.