SQL-Abfrage: Datums-Range über zwei Felder mit Date und Time

slowfly

Erfahrenes Mitglied
Hallo zusammen

Ich habe hier die Anforderung, Datensätze mit einem Datumsrange abzufragen.
Also zum Beispiel: Gib mir alle Datensätze vom 01.01.2012 12:00 bis zum 02.01.2012 12:00.

Das Problem ist jetzt, dass die Tabelle das Datum in zwei Feldern speichert, nämlich createDate und createTime (also z.B. '2012-01-01' und '12:00:00')

Jetzt habe ich natürlich das Problem, wenn ich
createTime >= '12:00:00' and
createTime <= '12:00:00' and
createDate >= '2012-01-01' and
createDate <= '2012-01-02'
abfrage, dass nur die Datensätze zurückkommen, die um 12:00:00 angelegt wurden.

Ich bin jetzt hingegangen und habe das ganze "zusammengecastet" (IBM DB2 Dialect):
CONCAT(cast(createDate as VARCHAR(10)), cast(createTime as VARCHAR(8))) >= ?
Den Wert schnippsle ich mir dann in der Applikation, welche die Abfrage startet, zusammen; also quasi
eingegebenesDatum.parse(dd.MM.yyyyHH:mm:ss)

Zusätzlich habe ich trotzdem noch den createDate abgefragt, gefühlt ist's dann ein bisschen schneller.

Ich könnte mir höchstens noch vorstellen, dass ich das ganze in einen UTC-Long caste, anstatt in einen VARCHAR, damit das Casten und vergleichen schneller geht, aber bevor ich da noch mehr herumbastle, würde ich doch gern wissen, ob ich nicht komplett auf dem Holzweg bin? Ich kann mir vorstellen, dass es eine elegantere Lösung gibt, was meint ihr?

Besten Dank und Gruss
slowy
 
Annahme: DB ist MySQL


Du kannst sie mit TIMESTAMP() zusammensetzen

SQL:
WHERE
    TIMESTAMP(createDate, createTime) BETWEEN TIMESTAMP('2012-01-01 12:00:00') AND TIMESTAMP('2012-01-02 12:00:00')
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück