# Oracle SQL Zeitabstand in Tagen



## Mark99 (5. Jan 2022)

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.


----------



## Oneixee5 (5. Jan 2022)

Mark99 hat gesagt.:


> Also Aktuelles minus eingetragenes Datum <= 730 Tage.


select * from  table t where t.date <= sysdate - 730


----------



## Mark99 (5. Jan 2022)

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


----------



## Oneixee5 (5. Jan 2022)

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.





						SQL Language Reference
					






					docs.oracle.com


----------



## Mark99 (5. Jan 2022)

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.


----------



## Oneixee5 (5. Jan 2022)

Mark99 hat gesagt.:


> 31.07.22


was soll denn da rauskommen? sysdate - 730
Um den Zeitanteil abzuschneiden kann auch trunc(sysdate - 730) verwendet werden, Oracle Datumstypen haben ja auch immer einen Zeitanteil.


----------



## Mark99 (5. Jan 2022)

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.


----------



## LimDul (5. Jan 2022)

Mark99 hat gesagt.:


> 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.


----------



## Mark99 (5. Jan 2022)

also er gibt mir ja jetzt alle Eintraege aus. Ich wollte ja einen gewissen Zeitabschnitt filtern.


----------



## LimDul (5. Jan 2022)

Mark99 hat gesagt.:


> also er gibt mir ja jetzt alle Eintraege aus. Ich wollte ja einen gewissen Zeitabschnitt filtern.


Da siehst du ob du überhaupt Einträge hast, die auf deine Filterkriterien passen - ich denke du hast keine die auf die Filterkriterien passen.


----------



## mihe7 (6. Jan 2022)

Mark99 hat gesagt.:


> In der Tabelle stehen allerdings auch Daten wie 31.07.22, deswegen muesste da ja eigentlich was bei rauskommen.





Mark99 hat gesagt.:


> 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?


----------



## Mark99 (6. Jan 2022)

Danke, ja da lag ein Denkfehler vor.


----------

