Das Filtern ist eine der wichtigsten Funktionen von Abfragen. In anderen Artikeln haben wir bereits gezeigt, welche Besonderheiten das Filtern von Textfeldern und Zahlenfeldern mit sich bringt. Im vorliegenden Artikel schauen wir uns das Filtern von Datensätzen nach dem Wert von Datumsfeldern an. Mögliche Kriterien sind ein bestimmtes Datum, die Zeit ab oder bis zu einem Datum, die Zeit zwischen zwei Daten, der heutige Tag, ein bestimmter Monat oder ein bestimmtes Jahr und viele mehr.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 2205_NachDatumFiltern.accdb.
Unterscheidung: Daten mit und ohne Uhrzeit
Bevor wir in die verschiedenen Möglichkeiten zum Filtern von Datensätzen nach der Datumsangabe in einem Feld einsteigen, müssen wir einen wichtigen Unterschied klären: Es gibt Datumsangaben mit und ohne Uhrzeit. Der Grund für diese Unterscheidung ist, wie Access Datumsangaben intern speichert. Dazu müssen wir außerdem wissen, dass die Ausgabe von Datumsangaben nur eine Formatierung von Double-Zahlen in einem bestimmten Format ist.
Intern werden Datumsangaben also als Zahlen des Datentyps Double gespeichert. Dabei geben die Stellen vor dem Komma die Anzahl der Tage seit dem 30.12.1899 an. Der Wert 1 entspricht also beispielsweise dem 31.12.1899, der Wert 44763 dem Datum 21.7.2022. Die Uhrzeit wird in den Nachkommastellen des Double-Wertes als Bruchteil eines Tages gespeichert. Haben wir keine Nachkommastellen, entspricht dies 0:00 Uhr. Lauten die Nachkommastellen 0,25, entspricht dies 6:00 Uhr und 0,5 entspricht 12:00 Uhr.
Fassen wir das mit dem Datum beziehungsweise der Zahl vor dem Komma zusammen, entspricht der Wert 44763,75 also beispielsweise 21.7.2022 18:00:00 Uhr.
Wir gehen in den folgenden Beispielen zunächst von reinen Datumsangaben ohne Angabe der Uhrzeit aus, was zwar von Access in einer Tabelle als reines Datum angezeigt wird, aber eigentlich dem jeweiligen Datum plus der Zeitangabe 0:00:00 Uhr entspricht. Wenn wir jedoch Vergleiche mit Datumsangaben ohne Uhrzeit anstellen wollen, ist es wichtig, dass alle Werte ohne Uhrzeit kommen.
Wenn wir sonst wissen wollen, welche Bestellungen alle am 21.7.2022 erfolgt sind und wir speichern die Bestellungen mit Uhrzeit in dem Feld BestelltAm der Bestellungentabelle, also beispielsweise 21.7.2022 6:00:00, dann wird diese Bestellung nicht im Ergebnis auftauchen – denn intern sucht Access nach Datensätzen, die im Feld BestelltAm den Wert 44763 enthalten, aber es liegt nur eines mit dem Wert 44763,25 vor.
Also nutzen wir für die ersten Beispiele ein Feld, das nur reine Datumsangaben ohne Uhrzeit beziehungsweise Nachkommastellen enthält (siehe Bild 1).
Bild 1: Tabelle mit einem Datumsfeld ohne Uhrzeit
Genaues Datum
Die erste und einfachste Variante ist das Auffinden von Datensätzen, die in einem Feld ein bestimmtes Datum enthalten.
Wenn wir in der obigen Tabelle nach allen Bestellungen vom 2.6.2021 suchen wollen, geben wir diesen Wert in die Zeile Kriterien für die Spalte BestelltAm ein (siehe Bild 2).
Bild 2: Datum als Vergleichswert
Direkt nachdem wir die Eingabe abschließen, indem wir in eine andere Zeile oder Spalte klicken, ändert Access den Wert 2.6.2021 automatisch in den folgenden Wert um:
#02.06.2021#
Es ergänzt also vorn und hinten eine Raute und füllt die Angabe für die Tage und Monate mit 0 auf. Dies ist das offizielle Format für die Eingabe von Datumsangaben in Abfragevergleichswerten.
Gibst Du die Rauten direkt mit ein, weiß Access, dass Du ein Datum als Vergleichswert nutzen möchtest und prüft dieses direkt bei der Eingabe.
Nicht dieses Datum
Wollen wir alle Datensätze ermitteln, deren Bestelldatum gerade nicht an dem angegebenen Datum bestellt wurden, verwenden wir das folgende Kriterium für das Feld BestelltAm:
Nicht #02.06.2021#
Vor einem bestimmten Datum
Um alle Datensätze abzufragen, deren Bestelldatum vor einem bestimmten Datum liegt, verwenden wir einen Vergleichsausdruck mit dem Kleiner-Zeichen:
<#9.06.2021#
Bis zu einem bestimmten Datum
Wenn wir hier auch noch das angegebene Datum einschließen wollen, nutzen wir statt dem Kleiner-Operator zusätzlich noch das Gleichheitszeichen:
<=#09.06.2021#
Nach einem bestimmten Datum
Für Bestellungen, die nach einem bestimmten Datum liegen, setzen wir den Größer-Vergleichsoperator ein:
>#09.06.2021#
Ab einem bestimmten Datum
Wenn wir das jeweilige Datum noch mit einschließen wollen, verwenden wir den Größer-Gleich-Operator:
>=#09.06.2021#
Zwischen zwei Daten
Für Bestellungen, die nach einem bestimmten Datum und vor einem anderen Datum liegen, verknüpfen wir zwei Bedingungen mit dem Und-Operator:
>#09.06.2021# Und <#20.06.2021#
Von Datum bis Datum
Wollen wir auch noch die Bestellungen erhalten, die am ersten und letzten Datum des angegebenen Zeitraums erfolgt sind, geben wir jeweils das Gleichheitszeichen hinzu:
>=#09.06.2021# Und <=#20.06.2021#
Von Datum bis Datum mit Zwischen…Und…
Gleichbedeutend mit >=… Und <=... ist der Zwischen…Und…-Operator. Diesen formulieren wir für den gleichen Zeitraum wie folgt:
Zwischen #09.06.2021# Und #20.06.2021#
Nicht in einem bestimmten Bereich
Wenn wir alle Bestellungen erhalten wollen, die nicht in dem zuvor definierten Bereich liegen, fügen wir nur das Nicht-Schlüsselwort vorne an und schließen so alle Datensätze aus diesem Bereich aus:
Nicht Zwischen #09.06.2021# Und #20.06.2021#
Das können wir mit Größer gleich und Kleiner gleich nicht wie folgt analog formulieren:
Nicht >=#09.06.2021# Und <=#20.06.2021#
Dies liefert nämlich alle Datensätze, die nicht ab dem 9.6.2021 und bis einschließlich 20.6.2021 bestellt wurden.
Der Grund ist, dass das Schlüsselwort Nicht nur für den ersten Teil vor dem Und-Operator angewendet wird. Wir erhalten also alle Bestellungen, die nicht ab dem 9.6.2021 erfolgten, die also vor dem 9.6.2021 ausgelöst wurden.
Das gewünschte Ergebnis erhalten wir, wenn wir den auszuschließenden Bereich wie folgt in Klammern setzen:
Nicht (>=#09.06.2021# Und <=#20.06.2021#)
Bestellungen von mehreren, nicht zwingend zusammenhängenden Datumsangaben
Wenn wir die Bestellungen beispielsweise vom 5.6.2021 und vom 9.6.2021 erhalten wollen, können wir die beiden Vergleichsausdrücke mit Oder verknüpfen:
#05.06.2021# Oder #09.06.2021#
Auf diese Weise können wir auch noch mehrere Datumsangaben mit Oder hinzufügen.
Mehrere Datumsangaben mit In
Wir können dies aber auch mit der In-Klausel erledigen. Hier geben wir die gesuchten Datumsangaben durch Semikola getrennt in Klammern an:
In (#05.06.2021#;#09.06.2021#)
Auch hier können wir beliebig viele weitere Datumsangaben hinzufügen.
Bestellungen des heutigen Tages
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: