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())
War es hilfreich?

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())

Von: http://zarez.net/?p=542

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())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top