T-SQL / DATETIME / Kleiner als

gifhouse

Grünschnabel
Hallo
ich suche jetzt schon seit Stunden und werde nicht fündig...
Ich hoffe hier kann mir jemand helfen.. mein Problem:

Ich habe eine MSSQL 2005 Tabelle mit einem DATETIME (20.12.2011 19:12:44) Feld
und möchte aus dieser Tabelle Spalten löschen wenn der aktuelle Datum/Uhrzeit Wert kleiner ist als der in der Tabelle gespeicherte Wert.

Wie kann ich hier z.B. nur auf die Stunde abfragen ob der DB Wert kleiner ist als die aktuelle Uhrzeit

bereits an dieser Stelle Danke für eure Hilfe
Th.

edit:
Na ja hier scheinbar auch nicht...
Oder hab ich was falsch, oder noch nicht, oder sonst einen Fehler gemacht der Forenspezifisch zum Ignorieren von Anfragen führt?
 
Zuletzt bearbeitet:
Hi und Willkommen bei tutorials.de,

Sorry für die späte Antwort, liegt nicht an deiner Frage.

Hilft dir der Code von hier unten weiter?
SQL:
SELECT * FROM Auftrag WHERE Auftragsdatum BETWEEN 
    CONVERT(datetime, '15.05.2005 00:00:00', 104) 
    AND CONVERT(datetime, '15.05.2005 23:59:59', 104)

Gruß
 
erstmal ein danke an dich das du dich erbarmt hast :)

Ist denke ich aber nicht das was ich brauche...

Ich habe in der Datenbank ständig neue DATETIME Einträge, diese werden als Datum UND Uhrzeit im Datentyp DATETIME im Format tt.mm.jjjj hh:mm:ss abgespeichert. So ein Eintrag hat eine maximale Gültigkeit von 3 Stunden, und soll anhand einer sich alle 3 Stunden ausführenden T-SQL Anweisung ( SQL Server AGENT )gelöscht werden.

Soweit ich Daten löschen möchte die älter als z.B. 20.12.2011 sind geht das so:

SQL:
DELETE  poi 
where  datediff(day,Gdatum,getdate())=1

Wobei Gdatum das DATETIME Feld ist

Wie aber jetzt wenn ich das anhand der Stunde lösen möchte?

SQL:
DELETE  poi 
where  datediff(hour,Gdatum,getdate())=1

funktioniert nicht... der Datensatz wird nicht gelöscht******!********?
 
Zuletzt bearbeitet:
Das mit dem Tag funktioniert also?
Das ist seltsam...

Wäre nicht ein >= angebrachter?
Alles löschen, wo das Alter mehr als ... ist?
Mit = löscht du doch nur, was genau eine Stunde alt ist. Zwei, drei Stunden etc. nicht.

Probiers mal mit >=
SQL:
DELETE poi
where datediff(hour,Gdatum,getdate())>=1
 
Ja Danke der Ansatz ist richtig...
das Problem ist gelöst...

So sieht das dann korrekt aus:

SQL:
DELETE  poi 
where  ABS(datediff(hour,Gdatum,getdate())) >=3
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück