これを行う最も合理的な方法は、日時値の時間部分を取り除き、結果を比較することです。日時から時間部分を取り除く最良の方法は、次のようになります。
cast(current_timestamp as date)
私は以前、次の2行のいずれかに似たプロセスを使用して提唱していました。
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
しかし、SQLServerにはDate
があります。 時間成分を持たないタイプの場合、これらの手法のいずれかを使用する理由はほとんどありません。
もう1つ覚えておくべきことは、where句または結合条件のすべての行に対して2つの日時値に対してクエリを実行する必要がある場合でも、クエリが失敗することです。可能であれば、これを何らかの方法で除外して、たとえばビューや計算された列を使用して、可能な限り事前に計算されるようにします。
最後に、DATEDIFF関数が交差した境界の数を比較することに注意してください。これは、'2009-09-14 11:59:59'
の間の日数の日付差を意味します および'2009-09-15 00:00:01'
2秒しか経過していなくても、は1ですが、DATEDIFFは'2009-09-15 00:00:01'
の間の日数です。 および'2009-09-15 11:59:59'
86,398秒が経過しても、まだゼロです。そこの時間部分はまったく気にせず、境界だけが気になります。クエリが実行しようとしていることによっては、それを有利に使用できる場合があります。