Code:
SELECT * FROM tabelle WHERE uhrzeit BETWEEN cast(:anfang AS time) AND cast(:ende AS time)
Was ich mich an der Stelle frage, ist, an was die
Query hier festmacht, dass der übergebene Parameter einen Zeittyp darstellt, ich übergebe ihn ja explizit als string. Ich hab auch schon versucht, den FieldType der Parameter hart auf ftString zu setzen, hat aber nichts gebracht.
Das legt fest, dass der Parameter als Time interpretiert werden soll (muss).
Wenn du abfragen möchtest, was in der Zeit von 18-0 Uhr gewesen ist und es bei anderen Abfragen keine Überschneidungen geben soll, dann müsste die Abfrage ja eigentlich lauten
Code:
00:00 <= Zeit < 09:00
09:00 <= Zeit < 18:00
18:00<= Zeit < 24:00
BETWEEN fragt aber so ab
Code:
00:00 <= Zeit <= 09:00
09:00 <= Zeit <= 18:00
18:00<= Zeit <= 24:00
Somit würden alle Einträge auf den Zeitgrenzen in den Abfragen quasi doppelt erscheinen.
Besser (und damit stressfreier) wäre es mit BETWEEN die Stunde abzufragen
Code:
0 <= Stunde( Zeit ) <= 8
9 <= Stunde( Zeit ) <= 17
18 <= Stunde( Zeit ) <= 23
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)