datetime
非常に大きなテーブルにSQLフィールドがあります。インデックスが作成されているため、クエリを実行する必要があります。
問題は、SQLは常に時間コンポーネントを保存しますが(常に深夜であっても)、検索は時間ではなく日に対して行われることです。
declare @dateVar datetime = '2013-03-11;
select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
t.[DateColumn]
常に時間コンポーネントが含まれているため、何も返されません。
私の質問は、これを回避する最良の方法は何ですか?
オプションには主に2つのグループがあるようです。
または
dateadd
を使用して2番目の変数を作成します。between ... and
>= ... and ... <=
を日付のみのコンポーネントに変換し
t.[DateColumn]
ます-これにより、インデックスが無視されるようになると思います。
これらは両方とも非常に厄介なようです-私は実際に範囲比較を行ったり、テーブルをスキャンしたりしたくありません。
もっと良い方法はありますか?
これらのオプションの1つが一貫して最適な方法である場合、どのように、そしてなぜですか?