Es ist möglich, die gewünschten Daten durch Kombinationen von nächster_tag und reguläre Datumsarithmetik. Der folgende Code sollte ziemlich nah dran sein, aber er ist ungetestet und schlägt wahrscheinlich in einigen Ausnahmefällen fehl, aber zumindest haben Sie eine allgemeine Idee :)
where resolved_date >= next_day( trunc(sysdate) - interval '14' day, 'SUN')
and resolved_date < next_day( trunc(sysdate) - interval '7' day, 'SUN')
trunc(sysdate)
das Datum auf den Tag kürzen; 2011-04-19 23:32:34 wird zu 2011-04-19 00:00:00, d. h. die Zeitkomponente wird entfernt.next_day(sysdate, 'SUN')
kommt nächsten sonntag wieder. Wenn sysdate zufällig ein Sonntag ist, wird der nächste Sonntag zurückgegeben.
Wichtig :Die Tagesnamen müssen in der gleichen Sprache sein wie Ihre Sitzung.
Das interval
Das Ding ist nur eine Standardmethode zum Addieren / Subtrahieren verschiedener Zeiteinheiten von einem Datum.
Alles zusammengenommen wäre die Logik für den 19. April 2011:
- Sysdate abschneiden => 2011-04-19 00:00:00
- 14 Tage abziehen => 05.04.2011 00:00:00
- Finden Sie den nächsten Sonntag => 2011-04-10 00:00:00
...und
- Sysdate abschneiden => 2011-04-19 00:00:00
- 7 Tage abziehen => 2011-04-12 00:00:00
- Finden Sie den nächsten Sonntag => 2011-04-17 00:00:00
..was zu folgender Abfrage führt:
where resolved_date >= timestamp '2011-04-10 00:00:00'
and resolved_date < timestamp '2011-04-17 00:00:00'
Alle aufgelösten_Daten, die an oder nach der ersten Sekunde des 10., aber vor der ersten Sekunde des 17., aufgetreten sind, würden eingeschlossen. Beachten Sie, dass >=
und <
ist nicht gleichbedeutend mit between
.
Ein Hinweis zur Leistung:Ich würde sicherstellen, dass Oracle den Datumsbereich korrekt auf 7 Tage schätzt und dass die richtige Join-Reihenfolge / Methode verwendet wird. Wenn Sie davon ausgehen, dass die Abfrage eine Weile ausgeführt wird, können Sie es sich leisten, die Datumsangaben in der Anwendung zu berechnen und als Datumsliterale bereitzustellen, anstatt sie wie oben beschrieben spontan zu berechnen.