SELECT über Zeit- und Datuminterval

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

SELECT über Zeit- und Datuminterval

Beitrag von starkard »

Hallo Leute,

Ich verwende eine Tabelle mit TIME und DATE in der in regelmässigen Abständen Einträge gemacht werden (Mysql , Zeoslib).
Ich benötige eine Abfrage, die alle Einträge schichtbezogen aufrufen kann. D.h. z.b Von Datum 1.1.2010 bis 5.1.2010 (auch tagübergreifend!) von 22:00 bis 6:00.
Hört sich im ersten Moment trivial an aber habe bis jetzt keine zufriedenstellende Lösung gefunden.

Ansätze:

Code: Alles auswählen

Datum BETWEEN :DatumVon AND :DatumBis AND Zeit BETWEEN :Uhrzeitvon AND :Uhrzeitbis
-> gibt keine Werte aus wenn tagübergreifend

Code: Alles auswählen

ADDTIME(datum,zeit)>=:vondatumzeit AND ADDTIME(datum,zeit)<=:bisdatumzeit
-> liefert alle Einträge innerhalb des Intervals
...

Was wäre hier der einfachste Weg möglichst ohne Stored Procedures, Scripts etc..
Wäre für jeden Gedanken dankbar.

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: SELECT über Zeit- und Datuminterval

Beitrag von Live »

Code: Alles auswählen

SELECT * FROM TABLE WHERE datum < SUBDATE(NOW(),INTERVAL 30 DAY)
Liefert alle Datensätze die älter als 30 Tage sind. Evtl kannst du damit etwas anfangen. Anstatt das Subdate(NOW) könntest du deinen entsprechenden Tag einsetzen.

Eventuell hilft dir das weiter.

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Re: SELECT über Zeit- und Datuminterval

Beitrag von starkard »

Danke für die schnelle Antwort,

Vielleicht muss ich ein bischen ausführlicher werden. Der Anwender hat jeweils 2 Eingabefelder für Datumvon und Datumbis und 2 Eingabefelder Zeitvon und Zeitbis.

Wie bereits erwähnt sollten aber alle Einträge angezeigt werden die auch tagübergreifend sind. z.B Vom 1.1.2010-5.1.2010 von 22:00 bis 6:00 und nur diese.

Code: Alles auswählen

Datum BETWEEN :DatumVon AND :DatumBis AND Zeit BETWEEN :Uhrzeitvon AND :Uhrzeitbis
funktioniert solange Zeitvon < Zeitbis, also z.b 6:00-18:00.

Für den Fall Zeitvon>Zeitbis, z.b 22:00-6:00 hapert es allerdings.
Wäre ein leichtes das abzuprüfen und ein anderen SELECT auszuführen aber welchen?

DATESUB liefert mir aber leider nur ein neues DateTime addiert mit dem INTERVAL oder habe ich etwas übersehen?

Gandi
Beiträge: 1
Registriert: Do 18. Mär 2010, 19:52

Re: SELECT über Zeit- und Datuminterval

Beitrag von Gandi »

Das Problem ist das "zwischen 22:00 und 6:00" Uhr!
Da 22 größer ist als 6 klappt das einfache BETWEEN nicht.

Versuchs mal mit etwas in der Art:

Code: Alles auswählen

WHERE Datum BETWEEN :DatumVon AND :DatumBis AND (Zeit BETWEEN :UhrzeitVon AND 23:59 OR Zeit BETWEEN 00:00 AND :UhrzeitBis)
Wenn die Schicht nicht über MItternacht geht, dann wäre dein erster Ansatz korrekt.
Du müsstest halt abfragen, ob :UhrzeitVon > :UhrzeitBis ist und die entsprechende Abfrage-Variante verwenden.

Hoffe, das hilft...

EDIT: Ninjad, (aber nur ein bisschen :P )

EDIT 2:
Eleganter wäre vielleicht

Code: Alles auswählen

WHERE Datum BETWEEN :DatumVon AND :DatumBis AND (Zeit NOT BETWEEN :UhrzeitBis AND :UhrzeitVon)
Evtl. noch 'ne Sekunde oder Millisekunde addieren bzw. abziehen, je nach dem wie genau es sein muss...

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Re: SELECT über Zeit- und Datuminterval

Beitrag von starkard »

:shock: Tausend Dank, so gehts natürlich und das auch ohne viel Aufwand! Genau das was ich brauchte! Danke an alle Beteiligten

Antworten