web-dev-qa-db-ja.com

日付が30日を超えるSQL DELETEステートメント

実行時に30日より古いフィールドを削除するSQLステートメントを見つけたい。

私のテーブル「events」には、データベースに挿入された日付と時刻を含むフィールド「date」があります。

私は今家にいないので、これをテストすることはできません。これはいいですか?

SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
44
Alex

WHERE句で [〜#〜] dateadd [〜#〜] を使用します。

...
WHERE date < DATEADD(day, -30, GETDATE())

dの代わりに、ddまたはdayの省略形を使用することもできます。

96
Colin Mackay

おそらく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)
8
James Wiseman

また使用することができます

SELECT *結果からWHERE date <NOW()-INTERVAL 30 DAY;

2
Vikas Chauhan

これを使用できます:

    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秒未満です。

1
rjose

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

1
Ray Koren

次の2つの日付を設定することもできます。

Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
1
Chagbert

Varcharに変換して1日だけを取得する代わりに(convert(varchar(8)、[Date]、112))、datetimeフィールドを保持し、日付のみ(時刻なし)にすることを好みます)。

SELECT * FROM Results 
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())
0
Bill Grubbs