Sven Rautenberg: Php-Datumabfrage

Beitrag lesen

Moin!

»» $sql = "SELECT xyz FROM datenbank WHERE datum=
»» und an dieser Stelle weiß ich nicht weiter. Datum soll in einer Frage gestern sein und in einer weiteren vorgestern, sozusagen

Im reichhaltigen Fundus der MySQL-Datums- und Zeitfunktionen findet sich unter anderem DATE_ADD() und DATE_SUB(), die es in der meines erachtens besseren Schreibweise

datum +/- INTERVAL ausdruck einheit

gibt. Also: CURDATE() - INTERVAL 1 DAY wäre das Datum von gestern.

Zu beachten wäre dann nur noch, dass die Spalte, mit der verglichen wird, ebenfalls auf das Tagesdatum zu reduzieren ist, sofern es sich nicht um den Datentyp DATE handelt. Die Funktion DATE() ist dafür ideal. Denn ansonsten vergleicht man ein Tagesdatum ohne Uhrzeit (von CURDATE() plus/minus dem Zeitoffset) mit einem Datum mit Uhrzeit - und das ist nicht identisch.

Genauer gesagt: Ein "Tagesdatum ohne Uhrzeit" wird immer als "Tagesdatum plus 00:00:00 Uhr" betrachtet.

Alternativ zum Vergleich zweier Daten mit auf "00:00:00" gepresster Uhrzeit könnte man natürlich auch vergleichen, ob das Datum des Datensatzes im Zeitintervall von 00:00:00 bis 23:59:59 liegt (bzw. 00:00:00 des Folgetages, wenn der kleine Fehler von einer Sekunde akzeptabel ist). Für Abfragen, die mehrere Tage umfassen sollen, ist das sowieso der einzige Weg: "WHERE datum BETWEEN grenzdatum1 AND grenzdatum2".

- Sven Rautenberg