date
フィールドに基づいて行を返します。datetime
フィールドに相当します。彼らは明らかにdd/MM/yyyy = dd/MM/yyyy 00:00:00
のフォーマットで直接一致するだけですが、私は時間を無視して探しています。SQLサーバーの日付と日時の等価性の比較
私が試した3つの方法がありますが、すべて動作しますが、何が最善であるか疑問に思っています。
1からCONVERT(varchar(10),MyDate,103) = CONVERT(varchar(10),MyDateTime,103))
2 - MyDate = CONVERT(date,MyDateTime)
3からMyDate = CAST(MyDateTime AS date)
4 - 私にMyDate = DATEADD(dd, DATEDIFF(dd, 0, MyDateTime), 0)
、#1は、確実に文字列比較を使用して文字列に変換し、最も遅くなければなりません効率が最も悪いはずです。しかし、テストではこれが最速です!以下私のテストである:
1 - 303ms平均
2 - 284ms平均
3 - 273ms平均
4 - 1745ms平均
テスト〜300,000サンプルサイズからのものです
これには理由がありますか?最初の選択肢は真に最良の選択肢ですか?
EDIT:300kレコードでそれぞれ10回実行されたテストを反映するようにテスト値を変更しました。結果を変更して、すべてが下に述べたDATEADD/DATEDIFF
メソッドのTim Schmelterとかなり似ていることを示します。それははるかに効率的ではないようです。
私は 'DATEADD/DATEDIFF'アプローチを使用しています。 http://stackoverflow.com/questions/1177449/best-approach-to-remove-time-part-of-datetime-in-sql-server –
クローズリクエストに関して、私はこれが重複しているとは思わないなぜなら、この種の問題は、もう一つの問題の解決策に逆らっているからです。ここでは文字列の変換が最も速いです! 'DATEADD/DATEDIFF'を考慮した編集質問 – anothershrubery
この平均のベースとなるサンプルサイズは? –