3

列のあるテーブルがあります

 TypeExame, DateExame

(Now-DateExame) > = 365 日ですべてのレコードを選択するにはどうすればよいですか?

4

3 に答える 3

4
select *
from MyTable
where datediff (day, DateExame, getdate()) >= 365

詳細については、 DATEDIFFおよびGETDATEを参照してください。

于 2013-07-06T10:01:10.397 に答える
3

にインデックスがある場合、次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()の結果の時間部分を削除する必要はまったくありません。

于 2013-07-07T22:21:42.900 に答える