これを行うための唯一の合理的な方法は、datetime値の時刻部分を取り去り、結果を比較することで、日時からの時間の部分を除去するための最良の方法は、このようなものです:
cast(current_timestamp as date)
私が使用して、次の2行のいずれかのように見えたプロセスを提唱するために使用:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
をしかし、今SQL Serverが時間コンポーネントを保持していないDate
タイプを、持っていること、のいずれかを使用するには少し理由がありますそれらの技術の
ここでもう1つ留意すべき点は、where句またはjoin条件の各行に対して2つのdatetime値に対して実行する必要がある場合でも、依然としてクエリを駄目にすることです。可能であれば、これを何らかの形で除外して、たとえばビューまたは計算列を使用して、できるだけ事前に計算されるようにします。
最後に、DATEDIFF関数は、交差する境界の数を比較することに注意してください。したがって、'2009-09-14 11:59:59'
と'2009-09-15 00:00:01'
の間の日付は、わずか2秒しか経過していませんが、'2009-09-15 00:00:01'
と'2009-09-15 11:59:59'
の間のDATEDIFFは、86,398秒が経過していても、ゼロです。そこには時間部分についてはまったく気にしないことに注意してください。クエリが何をしようとしているかに応じて、それをあなたの利点に利用できるかもしれません。私は2つの日付が等しかったことを確認したかった私自身の作品では、
時期尚早な最適化には関係ありません。「DATEDIFF」を使用してクエリを作成し、それがボトルネックか、クエリプランを調べていないかを確認してください。それが問題なら、代替案を探してください。 – Welbog
[SQL Serverの日時の時間部分を削除するための最良の方法]の可能な複製(http://stackoverflow.com/questions/1177449/best-approach-to-remove-time-part-of-datetime-in-sql-サーバー) – abatishchev