AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi '24:00' Uhr als Parameter an Query übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

'24:00' Uhr als Parameter an Query übergeben

Ein Thema von MatthiasR · begonnen am 8. Okt 2010 · letzter Beitrag vom 8. Okt 2010
 
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#8

AW: '24:00' Uhr als Parameter an Query übergeben

  Alt 8. Okt 2010, 11:24
Code:
cast(:ende AS time)
Das legt fest, dass der Parameter als Time interpretiert werden soll (muss).
War mir an der Stelle nicht bewusst, aber damit scheinst du Recht zu haben und das hat mich wiederum auf einen Lösungsansatz gebracht, der wohl funktioniert. Statt "cast(:ende as time)" schreibe ich im SQL-Statement einfach "cast(cast(:ende as text) as time)" und der Fisch ist geputzt. "24:00" wird nun zuerst mal als String interpretiert und daher auch angenommen, und anschließend erst von Postgres in einen time-Wert umgewandelt.
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
Der "between"-Aufruf sollte lediglich ein Beispiel sein an der Stelle und wird in der Form nicht in meiner Anwendung verwendet. Drum brauchst du da nicht weiter drüber nachzudenken. Aber mir ist die Tatsache bewusst, dass "between" sowohl den Anfangs-, als auch den Endzeitpunkt als zum Zeitraum zugehörig ansieht.
Was ist wenn Du den Typecast nach "TIME" weglässt und nur die Zahl übergibst sodass die Umwandlung implizit erfolgt?
Das hätte ich als nächstes ausprobiert, wobei ich dann eher "24:00" als Parameter übergeben würde, als "240000". Bei "between" könnte das noch funktionieren, bei der von mir ebenfalls verwendeten "overlaps"-Funktion von Postgres aber sicher nicht, die erwartet nämlich eindeutige time-Werte und im Falle des Falles einen expliziten Typcast.
versuche mal today
Denke ich nicht, dass das klappt, da "today" laut der von dir angegebenen Tabelle nur an die Typen "date, timestamp" zugewiesen werden kann, nicht jedoch time.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz