範囲を現在の日付と一致させたい場合は、StartDate
とEndDate
がタイプであると仮定してdate
、次のことを試すことができます。
SELECT ...
FROM atable
WHERE CAST(GETDATE() AS date) BETWEEN StartDate AND EndDate
;
上記は基本的にこれと同じです:
SELECT ...
FROM atable
WHERE StartDate <= CAST(GETDATE() AS date)
AND EndDate >= CAST(GETDATE() AS date)
;
ただし、オプティマイザーが2番目のバージョンとして変換できなかった場合、最初のバージョンではクエリプランが悪化する可能性があります。したがって、パフォーマンスが重要な場合は、最初にテストしてから決定する必要があります。
上記の両方のバージョンは、それEndDate
が包括的であることを前提としていることに注意してください。排他的である場合は、2番目のバージョンを使用して、少し変更することができます。
SELECT ...
FROM atable
WHERE StartDate <= CAST(GETDATE() AS date)
AND EndDate > CAST(GETDATE() AS date)
;
これにさらに単純化することができます:
SELECT ...
FROM atable
WHERE StartDate <= GETDATE()
AND EndDate > GETDATE()
;
しかし、それはおそらく暗黙の変換を使用し、パフォーマンスに影響を与える可能性がありますが、それがあなたに受け入れられるかどうかについては、どの程度か、さらにはわかりません。繰り返しますが、テストして比較する必要があります。一般的に、私はより単純なバージョンから始めて、現在のパフォーマンスに満足していなかった(またはもはや満足しなくなった)場合の代替案を念頭に置いています。