Clever datetime benutzen
Peter Gabriel
- datenbank
Hallo,
ich bin auf der Suche nach einer eleganten und effizienten Loesung fuer folgendes Problem. Ich habe in einer Tabelle eine Spalte im Datentyp datetime. Nun moechte ich bestimmte Werte selektieren, z.B. gib mir alle Datensaetze von gestern, vom 24.12.2005, ...
Die einzige Loesung die ich parat habe ist LIKE zu benutzen. Beispiel in PHP:
$query = "SELECT * FROM events WHERE datetime
LIKE '" . date("Y-m-d", strtotime("yesterday")) . "%'";
Das wirkt auf mich irgendwie wenig effizient, gibt es da eine bessere Loesung?
Danke fuer Eure Mithilfe.
Hallo Peter
ich bin auf der Suche nach einer eleganten und effizienten Loesung fuer folgendes Problem. Ich habe in einer Tabelle eine Spalte im Datentyp datetime. Nun moechte ich bestimmte Werte selektieren, z.B. gib mir alle Datensaetze von gestern, vom 24.12.2005, ...
Die einzige Loesung die ich parat habe ist LIKE zu benutzen.
Es gibt viele weitere Vergleichsoperatoren,
=
bietet sich an :-)
SELECT * FROM events WHERE datetime
LIKE '" . date("Y-m-d", strtotime("yesterday")) . "%'";
Ich finde es fürchterlich unelegant, reservierte Wörter als Spaltennamen zu verwenden. Welchen Zeitpunkt gibt denn die Spalte an, benenne sie entsprechend. Die Maskierungszeichen sind übrigens von Datenbankmanagementsystem (DBMS) zu Datenbankmanagementsystem unterschiedlich, die Backticks und das DATETIME-Format lassen mich auf MySQL schließen.
Das wirkt auf mich irgendwie wenig effizient, gibt es da eine bessere Loesung?
Ja, auf mich auch - verwende ich auch nicht :-) Dein DBMS weist sicherlich Datums- und Zeitfunktionen auf, mit denen Du Dein Problem sauber lösen kannst, z.B:
SELECT
spalte1,
spalte2,
<weitere Spalten>
FROM events
WHERE Formatfunktion(<datumsspalte>) = <datum in entsprechendem Datumsformat>
Auf jeden Fall ist es eine gute Idee, für Datums- oder Zeitangaben den entsprechenden Datentyp zu verwenden.
Freundliche Grüße
Vinzenz
Danke Vinzenz, hat mir sehr weiter geholfen!