Oracle SQL Zeitabstand in Tagen

Mark99

Mitglied
Hallo ich lege gerade eine Datenbank an und moechte nun ein paar Abfragen bauen.
Gegeben habe ich in einer Spalte ein Datum, davon ausgehend moechte ich mir alle Objekte der Tabelle anzeigen lassen die vom jetzigen Datum aus eine Distanz kleiner gleich von zwei Jahren bzw. 730 Tagen haben.
Also Aktuelles minus eingetragenes Datum <= 730 Tage.
 
Danke fuer deine Antwort.

SELECT s.name, vertrag.ende
FROM s JOIN vertrag
ON s.v_id = vertrag.v_id
WHERE vertrag.ende <= SYSDATE - 730;

Da kam bei mir allerdings kein Ergebnis, Datumsformat von vertrag dd.mm.yy
 
vertrag.ende muss eine Datumsspalte sein, wenn du mit einem Datum arbeiten willst. Vermutlich wird hier eine automatische Konvertierung von vertrag.ende versucht, weil es evtl. eine varchar2-Spalte ist. Das funktioniert dann nicht weil dd.mm.yy erwartet wird. Du kannst die Funktion to_date verwenden:
select * from table t where to_date(t.date, 'DD.MM.YYYY HH24:MI:SS') <= sysdate - 730
Es kommt natürlich auf das Format an.
Bitte immer die ganze Fehlermeldung posten.
 
also ich habe Date als Data_Type und es kam keine Fehlermeldung sondern eine leere Tabelle. In der Tabelle stehen allerdings auch Daten wie 31.07.22, deswegen muesste da ja eigentlich was bei rauskommen.
 
rauskommen soll das die namen und das vertragsende angezeigt wird, bei allen bei denen die Vertragsdauer weniger als zwei Jahre betraegt. Also das Ende innerhalb der naechsten zwei Jahre erreicht wird.
Ich bin erst vor kurzem in Datenbanken eingestiegen, man findet sich irgendwie zurecht, aber bei Datengeschichten haenge ich komplett fest.
 
Zuletzt bearbeitet:
also ich habe Date als Data_Type und es kam keine Fehlermeldung sondern eine leere Tabelle. In der Tabelle stehen allerdings auch Daten wie 31.07.22, deswegen muesste da ja eigentlich was bei rauskommen.
31.07.22 ist vermutlich 31.07.2022.

Mach mal SELECT TO_CHAR(ende, 'DD.MM.YYYY') FROM vertrag ORDER BY ende ASC;
Dann siehst du die ältesten Datumsangaben oben.
 
In der Tabelle stehen allerdings auch Daten wie 31.07.22, deswegen muesste da ja eigentlich was bei rauskommen.
WHERE vertrag.ende <= SYSDATE - 730;
Wenn Du heute (06.01.2022) 730 Tage zurückgehst, kommst Du auf den 07.01.2020. Du verlangst nun, dass das Vertragsende vor (bzw. nicht nach) dem 07.01.2020 liegt. Wieso erwartest Du, dass dabei ein Vertrag mit Ende 31.07.2022 rauskommt?
 

Zurück
Oben