date
フィールドに等しいフィールドに基づいて行を返していdatetime
ます。それらは明らかに、の形式の場合にのみ直接一致しますがdd/MM/yyyy = dd/MM/yyyy 00:00:00
、時間を無視しようとしています。
私が試した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 - 平均 303 ミリ秒
2 - 平均 284 ミリ秒
3 - 平均 273 ミリ秒
4 - 平均 1745 ミリ秒
テストは〜300,000のサンプルサイズからのものです
これには理由がありますか?最初のオプションは本当に最良のオプションですか?
編集: 300k レコードに対してそれぞれ 10 回実行されるテストを反映するようにテスト値を変更しました。DATEADD/DATEDIFF
結果を変更して、後述の Tim Schmelterの方法を除いて、すべてがかなり似ていることを示します。これは最も効率が悪いと言えます。