実行時に30日より古いフィールドを削除するSQLステートメントを見つけたい。
私のテーブル「events」には、データベースに挿入された日付と時刻を含むフィールド「date」があります。
私は今家にいないので、これをテストすることはできません。これはいいですか?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
WHERE句で [〜#〜] dateadd [〜#〜] を使用します。
...
WHERE date < DATEADD(day, -30, GETDATE())
d
の代わりに、dd
またはday
の省略形を使用することもできます。
おそらくDATEADD
がこれを行う最も透明な方法ですが、単にgetdate()-30
でも十分であることは注目に値します。
また、今から30日、つまり時間、分、秒などを探していますか?または、今日の真夜中から30日間(例:2010年12月6日00:00:00.000)。その場合、次のことを検討する必要があります。
SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
また使用することができます
SELECT *結果からWHERE date <NOW()-INTERVAL 30 DAY;
これを使用できます:
DELETE FROM table_name WHERE date_column <
CAST(CONVERT(char(8), (DATEADD(day,-30,GETDATE())), 112) AS datetime)
しかし、より良いオプションは以下を使用することです:
DELETE FROM table_name WHERE DATEDIFF(dd, date_column, GETDATE()) > 30
前者はsargableではなく(つまり、式の右側にある関数なのでインデックスを使用できません)、30秒かかります。後者はsargableで、1秒未満です。
30日以上前のDate_columnにdatetime値を持つテーブルからレコードを削除するには、次のクエリを使用します。
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < GETDATE() - 30
...またはこれ:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(dd,-30,GETDATE())
12時間以上前のDate_columnに日時値を持つテーブルからレコードを削除するには:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(hh,-12,GETDATE())
Date_columnに15分以上古い日時値を持つレコードをテーブルから削除するには:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-15,GETDATE())
From: http://zarez.net/?p=542
次の2つの日付を設定することもできます。
Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
Varcharに変換して1日だけを取得する代わりに(convert(varchar(8)、[Date]、112))、datetimeフィールドを保持し、日付のみ(時刻なし)にすることを好みます)。
SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())