2016-07-20 3 views
0

Ich möchte einen SQL-Server-Job erstellen, der jeden Monat ausgeführt wird und alle alten Datensätze mit Ausnahme der letzten zwei Monate Daten entfernt. Mein ultimatives Motiv ist nur die letzten 2 Monate Daten zu halten Meine Datenbank, wenn Job ausgeführt wird, unabhängig von Wetter sind die Monate 28,30 oder 31 Tage Monat. für ex- Wenn der Job am 1. März ausgeführt wird, möchte ich alle Datensätze vom 1. Januar bis zum 1. März in meiner aktuellen Datenbank speichern und alle Datensätze löschen.Löschen Sie alle Daten vor 2 Monaten aus Tabelle in sqlserver

Derzeit verwende ich die folgende SQL-Abfrage für die Auswahl von Daten zu entfernen.

SELECT * 
    FROM tbl 
    where [Datetime] <= DATEADD(MONTH, -2,convert(datetime,'03/02/2016') ) 

Hinweis: - Das Datumsformat ist "MM/TT/JJJJ". aber es wählt auch die Daten von 1. Jan. Es ist nicht festgelegt, den Job am 1. jeden Monats zu beenden. wenn ich das Datum als '03/01/2016 'nehme, ist die Ausgabe gut. Nun, ich werde folgendes verwenden, wo Klausel

where [Datetime] <= DATEADD(MONTH, -2,Getdate()). 

so betrachten, dass das Datum jeden Zeitpunkt des März sein können (oder das Datum eines jeden Monats)

Any suggestons? irgendwelche Ideen?. Bitte helfen Sie mir

Vielen Dank im Voraus

Antwort

1

Diese Arbeit sollte:

DECLARE @requiredDate datetime 
SELECT @requiredDate = CONVERT(DATETIME,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-2, 0)) 

SELECT * 
    FROM tbl 
    where [Datetime] < @requiredDate 
+0

Das OP auch den ersten des laufenden Monats will es lief, '01.05/2016' im Falle Ihrer Code, also müssen Sie einen Tag hinzufügen, so dass der 'SELECT' keine Zeilen löscht, die zB eine [DateTime] von' 5/1/2016 03: 31: 56' haben. Die Verwendung von '<=' funktioniert nur, wenn Sie @requiredDate 23:59:59 hinzufügen. 'SELECT @requiredDate = DATEADD (Tag, 1, CONVERT (DATETIME, DATENADD (MM, DATEDIFF (MM, 0, GETDATE()) - 2, 0))) – scsimon

Verwandte Themen