列のあるテーブルがあります
TypeExame, DateExame
(Now-DateExame) > = 365 日ですべてのレコードを選択するにはどうすればよいですか?
列のあるテーブルがあります
TypeExame, DateExame
(Now-DateExame) > = 365 日ですべてのレコードを選択するにはどうすればよいですか?
にインデックスがある場合、次DateExame
のように条件を設定すると、その使用が有効になります。
SELECT *
FROM atable
WHERE DateExame <= DATEADD(DAY, -365, CAST(GETDATE() AS date))
;
上記はdate
データ型を参照しているため、それを実行するには少なくとも SQL Server 2008 が必要です。以前のバージョンで機能させるには、次のように条件を書き直すことができます。
WHERE DateExame <= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 365, 0)
基本的に、変更されたバージョンではDATEADD/DATEDIFF メソッドを使用して値を切り捨てdatetime
、途中で 365 日を差し引いています。
ただし、すべてのDateExame
値が時間部分のない日付である場合、この単純なバージョンも同様に機能するはずです。
WHERE DateExame <= DATEADD(DAY, -365, GETDATE())
つまり、GETDATE()
の結果の時間部分を削除する必要はまったくありません。