2012-12-17 11 views
9

Ich brauche ein SSIS-Paket zu erstellen, die durch die Datensätze in einer table(T1) älter als 3 Monate (basierend auf ALERT_TIMESTAMP) und verschieben Sie sie an einen anderen table(T2)Anzeige Rekord älter als 3 Monate in SQL

Meine Anfrage zum Anschlag ist:

SELECT * FROM T1 
WHERE (DATEDIFF([month], ALERT_TIMESTAMP, GETDATE()) > 3) 

Alert_timestamp Spalte in Datetime Format ist. zB: '10/26/2012 12:00:00 AM'

Wenn ich die Abfrage ausführen, sollte es alle Datensätze anzeigen, die älter sind als 3 Monate, aber es nicht.

+0

u kann die Struktur der Tabellen zur Verfügung stellen? – user7282

+0

Was ist die Datumsformateinstellung? Welches Format haben Sie, wenn Sie select getdate() ausführen? – GeorgesD

Antwort

15

dieses

select * from `table` where `yourfield` >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) 

Seit Tagen versuchen, Jahr zum Beispiel siehe unten.

DATE_SUB(CURDATE(), INTERVAL 15 DAY) /*For getting record specific days*/ 

DATE_SUB(CURDATE(), INTERVAL 1 YEAR) /*for getting records specific years*/ 


Für Anand, Abfrage

BETWEEN DATE_SUB(CURDATE() ,INTERVAL 6 MONTH) AND DATE_SUB(CURDATE() ,INTERVAL 3 MONTH) 
/* For Getting records between last 6 month to last 3 month 
+0

Dank @Fahim Parkar – softsdev

+0

Dies ist das Gegenteil von dem, was OP gefragt hat. Ihre Lösung wird alle Datensätze in der Tabelle zurückgeben, die _ jünger als _ oder _exaktly_ 3 Monate alt sind, während die Frage nach allen Datensätzen _older_ als 3 Monate gestellt wird. Sie müssen nur '> =' mit '<' ändern –

2

Was Sie gepostet haben, ist nicht MySQL. Angenommen, Sie verwenden MS SQL Server, sollten Sie die ABS() Funktion verwenden.

SELECT * FROM  T1 
WHERE  ABS(DATEDIFF([month], ALERT_TIMESTAMP, GETDATE())) > 3 
Verwandte Themen