[SQL] Datensätze nach 6 Monaten löschen

Steusi

Nasenbär
[MSSQL] Datensätze nach 6 Monaten löschen

Hallo Leute ich habe eine MSSQL-DB und möchte in bestimmten Tabellen, alte Datensätze löschen.

In den Tabellen ist eine Spalte im Format "Datum/Uhrzeit" formatiert und steht folgendermaßen in der DB:
Code:
StartTime		Data
26.06.2008 06:48:03	1
26.06.2008 06:48:05	2
26.06.2008 06:48:27	3
26.06.2008 06:58:05	8
27.06.2008 06:58:05	9
Ich arbeite ja sonst öfters mit MySQL, trotzdem bekomme ich es nicht hin :-(

Code:
DELETE FROM Tabelle WHERE StartTime < '27.06.2008';

DELETE FROM Tabelle WHERE StartTime < '20080627';
Ich habe noch einige mehr probiert. Aber ich würde nicht gern ein Datum hinterlegen. Wenn die Abfrage gestartet wird soll ein Wert berechnet werden. Also HEUTE - 180 Tage, gibt es soetwas wie Date, TIme, Now etc? Mit Casts evtl?



Sonst realisiere ich es mit PHP bei MySQL, aber bei reinem SQL (MSSQL) muss es doch auch eine Möglichkeit geben. Hoffe jemand kann mir helfen. Nach meinen Befehlen verweigert er strikt die Arbeit :-(

Schon mal vielen Dank im Voraus
 
Zuletzt bearbeitet:
gehen alle MySQL Befehle auch in SQL?

Gut also CURDATE() liefert mir das jetzige Datum, wie kann ich damit weiter rechnen?

Folgendes wird ja bestimmt nicht gehen
Code:
WHERE CURDATE() - 180 DAY;

Muss ich mir Intervalle schaffen?
Code:
SELECT something FROM tbl_name
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= tbl_row;
Hier weigert er sich aber die 30 zu akzeptieren (fehlender Operator)

Kann mir jemand die korrekt Schreibweise zeigen, da meine SQL-Statements mit dem festen Datumswerten funktionieren ja leider auch nicht.


Ich bin beim testen in Microsoft Access, aber wenn ich Websites sehen, wo folgendes steht:
Code:
mydate = date - 5

sql = "SELECT * FROM anzeigen WHERE datum <= #" & month(mydate) & "/" & day(mydate) & "/" & yeary(mydate) & "#"
frag ich mich, wie man es eingeben soll. Da Access sofort meckert. Später gebe ich es direkt in die SQL-DB ein, nur da will ich jetzt nicht rum probieren.
 
Zuletzt bearbeitet:
ein Link hilft mir nicht so wirklich weiter. Ich benötige ja nicht wirklich eine Datumsdifferenzberechnung. Da ich ja folgendes möchte:

Lösche alle Datensätze, welche älter als 6 Monate (oder auch 180 Tage) sind!

Also:

DELETE FROM Tabelle WHERE StartTime < (getdate() - 180);
 
Zuletzt bearbeitet:
ein Link hilft mir nicht so wirklich weiter. Ich benötige ja nicht wirklich eine Datumsdifferenzberechnung. Da ich ja folgendes möchte:

Lösche alle Datensätze, welche älter als 6 Monate (oder auch 180 Tage) sind!
Und? Warum sollte dir jetzt die Berechnung einer Datums-Differenz nichts nützen?

datediff(day, starttime, getdate()) >= 180
Gruß
 
Dann erhalte ich folgendes:

Code:
Incorrect syntax near '>'.

Mit getdate() sollte es doch auch funktionieren oder? Also bei Access klappt es wunderbar mit date() und auf dem Server beginnt er mit getdate() auch die Anfrage zu bearbeiten bricht aber ab, warum muss ich erst noch eruieren.
 
Dann erhalte ich folgendes:

Code:
Incorrect syntax near '>'.
Was genau hast du eingegeben? Bei mir klappt das problemlos. Welche Version von MSSQL setzt du ein?
Mit getdate() sollte es doch auch funktionieren oder?
Ich verstehe nicht wo dein Problem liegt.
Also bei Access klappt es wunderbar mit date()
Was hat das jetzt mit Access zu tun?

Gruß
 
Eingegeben hatte ich:

DELETE FROM Tabelle WHERE datediff(day, starttime, getdate()) >= 180;

Bei getdate() habe ich kein Problem.

Bei Access habe ich die SQL-Statements getestet, deshalb die Information.
Die Version von MS-SQL kann ich nicht genau sagen, aufgesetzt wurde alles von einer Fremdfirma die auch kaum bereit ist Informationen raus zu geben, deshalb müssen wir es selbst auch umständliche Art und Weise lösen.

Aber ich danke dir, hast mir sehr geholfen!
 
Probiers mal mit :

WHERE starttime <= to_char(SYSDATE- 180, 'dd.mm.yyyy')

Sysdate benutzt er die aktuelle Zeit die der Computer anzeigt.
Mit "-180" werden 180 tage also ein halbes Jahr abgezogen.
 

Neue Beiträge

Zurück