Datumsfelder begrenzen

Mister.Y

Neues Mitglied
Hallo zusammen,

ich habe eine SQL-Datenbank, in der u.a. in einer Tabelle ein Feld existiert, wo Datumswerte in der Form 01.01.2021 abgespeichert werden.

Jetzt möchte ich gerne für einen von mir festgelegten Zeitraum (z.B: 01.04.2021 bis 31.03.2021) alle Eintragungen angezeigt bekommen.
Wenn ich mich richtig erinnere ist das irgendwie mit between zu machen, wobei mir ganz klar ist, wie das bei Datumswerten funktioniert.

Muss ich zuvor irgendwas umrechnen in "Zahlen" oder wird das von SQL direkt umgesetzt?

Ich würde halt gerne sowas machen...
Code:
Startdatum = 01.04.2021
Enddatum = 31.03.2022
SELECT * FROM xyz WHERE DATUM BETWEEN (STARTDATUM AND ENDDATUM)
muss ich irgendwelche Formatierungs-Parameter übergeben oder wie sollte ich das ganze machen.

Die Datumsformate innerhalb der Tabelle, die abgespeichert wurden, sind im deutschen Datumsformat als dd.mm.yyyy

Kann mir jemand helfen, wie ich hier die WHERE-Klausel richtig formuliere, damit alles sauber dargestellt wird.

Vielen lieben Dank im Voraus.
 

JR Cologne

Administrator
Teammitglied
Hallo @Mister.Y,

erstmal vorweg:
Grundsätzlich ist es nicht sonderlich ratsam, Datumswerte in einem eigenen Format als String (VARCHAR) in der Datenbank abzuspeichern.
Das erschwert den Umgang und die Verarbeitung der Daten teils ungemein.
Eine bessere Wahl wäre hier der Typ DATE oder DATETIME gewesen.

Vorausgesetzt ...
  1. du kannst/möchtest dies nicht ändern,
  2. du kannst/möchtest vor der Datenbankabfrage nicht serverseitig Umwandlungen der Datumsparameter für den festgelegten Zeitraum vornehmen oder anderweitig im Backend filtern,
... bleibt dir natürlich nur, einen etwas hässlichen und umständlichen SQL-Query zu schreiben, der dafür Sorge trägt, dass die Datumswerte vergleichbar sind und du somit auf den BETWEEN-Operator setzen kannst.

Hier mein Vorschlag (unter der Annahme, dass du eine MySQL-/MariaDB-Datenbank im Einsatz hast):

SQL:
SELECT * FROM `xyz` WHERE STR_TO_DATE(`datum`, '%d.%m.%Y') BETWEEN STR_TO_DATE('01.04.2021', '%d.%m.%Y') AND STR_TO_DATE('31.03.2022', '%d.%m.%Y');

Der Schlüssel zum Erfolg ist also die Funktion STR_TO_DATE(), welche es dir ermöglicht, einen Datumsstring aus einem angegebenen Format in ein DATE-Wert umzuwandeln.
 
Oben Unten