SQL-Anweisung delete wo Zeitpunkt mehr als 30 Tagen
-
09-10-2019 - |
Frage
Ich möchte eine SQL-Anweisung finden, dass, wenn sie ausgeführt Löschungen Felder, die älter sind als 30 Tage.
Meine Tabelle „Ereignisse“ hat ein Feld „Datum“, das das Datum enthält, und die Zeit, die in der Datenbank eingefügt wurde.
Ich bin zu Hause nicht gerade jetzt so dass ich das nicht testen kann. ist das gut ?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
Lösung
Verwenden Sie DATEADD in Ihrer WHERE-Klausel:
...
WHERE date < DATEADD(day, -30, GETDATE())
Sie können auch Abkürzung d
oder dd
statt day
verwenden.
Andere Tipps
Obwohl die DATEADD
ist wahrscheinlich der transparrent Weg, dies zu tun, ist es erwähnenswert,
dass einfach getdate()-30
ebenfalls ausreichend.
Auch suchen Sie für 30 Tage ab jetzt, das heißt einschließlich Stunden, Minuten, Sekunden, etc? Oder 30 Tage ab Mitternacht heute (z 12.06.2010 00: 00: 00.000). In diesem Fall sollten Sie überlegen:
SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
Sie können auch verwenden
SELECT * from Ergebnisse WHERE Datum
Sie können auch zwischen zwei Daten festgelegt:
Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
So löschen Sie Datensätze aus einer Tabelle, die einen Datetime-Wert in Date_column hat älter als 30 Tage nutzen diese Abfrage:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < GETDATE() - 30
... oder so:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(dd,-30,GETDATE())
So löschen Sie Datensätze aus einer Tabelle, die einen Datetime-Wert in Date_column älter als 12 Stunden hat:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(hh,-12,GETDATE())
So löschen Sie Datensätze aus einer Tabelle, die einen Datetime-Wert in Date_column hat älter als 15 Minuten:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-15,GETDATE())
Wir können diese verwenden:
DELETE FROM table_name WHERE date_column <
CAST(CONVERT(char(8), (DATEADD(day,-30,GETDATE())), 112) AS datetime)
Aber eine bessere Option ist die Verwendung:
DELETE FROM table_name WHERE DATEDIFF(dd, date_column, GETDATE()) > 30
Ersteres ist nicht sargable (d.h.e Funktionen auf der rechten Seite des Ausdrucks, so dass es nicht Index verwenden kann) und dauert 30 Sekunden, wobei die letztere ist sargable und dauert weniger als eine Sekunde.
Statt varchar zu konvertieren nur den Tag zu bekommen ( convert (varchar (8), [Datum], 112) ), ziehe ich es ein Datetime-Feld zu halten und sie nur das Datum zu machen ( ohne Zeit).
SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())