2010-12-06 5 views
36

Ich möchte eine SQL-Anweisung finden, die bei der Ausführung Felder löscht, die älter als 30 Tage sind.sql delete Anweisung, wo das Datum größer als 30 Tage ist

Meine Tabelle "Ereignisse" hat ein Feld "Datum", das das Datum und die Uhrzeit enthält, in der es in die Datenbank eingefügt wurde.

Ich bin nicht zu Hause, also kann ich das nicht testen. ist das gut ?

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

Eigentlich .... Löschen "Felder" ?? Sie löschen Zeilen, keine Felder. Möchten Sie die Felder NULLEN? –

+0

Ihre obige SQL wählt Zeilen aus, in denen Tage innerhalb der letzten 30 Tage liegen. –

+0

@Colin ah ja! Vielen Dank ! – Alex

Antwort

78

Verwenden DATEADD in Ihrer WHERE-Klausel:

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

können Sie verwenden auch Abkürzung d oder dd statt day.

+0

Wenn Sie für einen Monat einen Monat anstatt 30 Tage benötigen, können Sie ihn in DATEADD ändern (MONAT, -5, GETDATE()) – iMatoria

+0

FUNKTION fu_dev.DATEADD existiert nicht. Warum bekomme ich diesen Fehler? fu_dev ist meine Datenbank. – Shaonline

8

Obwohl die DATEADD ist wahrscheinlich die transparenteste Möglichkeit, dies zu tun, ist es erwähnenswert , dass einfach getdate()-30 wird auch ausreichen.

Sie suchen auch nach 30 Tagen, d. H. Einschließlich Stunden, Minuten, Sekunden usw.? Oder 30 Tage nach Mitternacht heute (z. B. 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) 
+0

Vielen Dank für die ausführliche Antwort! – Alex

+0

Daumen hoch für den Hinweis, dass Stunden, Minuten und Sekunden das Ergebnis beeinflussen. – r41n

1

Sie auch zwischen zwei Daten einstellen könnten:

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

Statt zu varchar der Umwandlung nur den Tag (convert (varchar (8) zu erhalten, [ Datum], 112)), bevorzuge ich es, ein Datetime-Feld zu halten und es nur das Datum (ohne die Zeit) zu machen.

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

Sie auch

SELECT * from Ergebnisse WHERE Datum < NOW() verwenden könnte - 30 Tage-Intervall;

0

So löschen Sie Datensätze aus einer Tabelle, die eine Datetime-Wert in Date_column älter als 30 Tage nutzen diese Abfrage haben:

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

Zum Löschen von Datensätzen aus einer Tabelle, die einen Datetime-Wert in Date_column älter als 12 Stunden haben:

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 älter als 15 Minuten hat:

USE Database_name; 
DELETE FROM Table_name 
WHERE Date_column < DATEADD(mi,-15,GETDATE()) 

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

Verwandte Themen