![]() |
Datenbank: SQLite • Version: 3.10.0 • Zugriff über: Delphi FireDAC
SQLite SELECT Abfrage mit WHERE auf ein time Feld
in einer SQLite Datenbank habe ich unter anderem zwei Felder
[EntryDate] DATE, [EntryTime] TIME, Nun mache ich folgende Abfrage: Datum / Zeit übergebe ich im Delphi Code mit hilfe von Parameter WHERE EntryDate = :EntryDate AND EntryTime = :EntryTime SELECT Id, EntryDate, EntryTime FROM Tm_TimeRawData WHERE EntryDate = "2025-02-23" Ergibt: Id EntryDate EntryTime 3677 2025-02-23 10:51:00.000 3678 2025-02-23 11:49:00.000 3679 2025-02-23 12:23:00.000 Möchte nun aber auch noch eine bestimmte Zeit haben also mit dieser Abfrage SELECT Id, EntryDate, EntryTime FROM Tm_TimeRawData WHERE EntryDate = "2025-02-23" AND EntryTime = "11:49:00" Ergibt aber leider kein resultat Wie kann ich die WHERE Klausel für das Zeit Feld EntryTime dazu bringen mir den gewünschten Datensatz zu liefern? Schreibe ich EntryTime = "11:49:00.000" bringt nicht Schreibe ich EntryTime > "11:49:00" dann werden alle weiteren inklusive 11:49 angezeigt Schreibe ich nun WHERE EntryDate = "2025-02-23" AND EntryTime > "11:49:00" Order by EntryTime LIMIT 1 Dann erhalte ich den gewünschten Datensatz allerdings finde ich dies doch etwas seltsam. Sollte doch eleganter gehen. Vielleicht hat jemand eine idee oder kennt das bereits Wäre sehr Dankbar für jegliche Hinweise wie das zu lösen ist. Gruss und Danke HeWy |
AW: SQLite SELECT Abfrage mit WHERE auf ein time Feld
Hallo
naja, Datums- und Zeitwerte werden intern meist als Fließkommazahl abgebildet. In Delphi z. B. Double. Der ganzzahlige Teil ist dabei die Anzahl der Tage seit einem bestimmten Startdatum (bei Delphi glaube ich 30.12.1899). Das kann ohne Verluste repräsentiert werden. Die Zeit ist dann der Nachkommateil und bei Fließkommazahlen gibt's prinzipbedingt den Effekt, dass man nicht jede Nachkommazahl exakt repräsentieren kann. Ich könnte mir also sowas vorstellen: (EntryTime >= "11:49:00") and (EntryTime <= "11:49:01") ggf. noch genauer, je nach dem wie genau die Zeit urspründlich erfasst wurde. |
AW: SQLite SELECT Abfrage mit WHERE auf ein time Feld
Das liegt daran, dass SQLite die Daten als Text ablegt. Du musst für den Vergleich daher für ein passendes Format sorgen:
Code:
Alternativ geht es mit LIKE:
SELECT Id, EntryDate, EntryTime
FROM Tm_TimeRawData WHERE EntryDate = '2025-02-23' AND strftime('%H:%M:%S', EntryTime) = '11:49:00';
Code:
Das habe ich hier online getestet:
SELECT Id, EntryDate, EntryTime
FROM Tm_TimeRawData WHERE EntryDate = '2025-02-23' AND EntryTime LIKE '11:49:00%'; ![]() Zur vorherigen Erstellung der DB habe ich dies verwendet:
Code:
CREATE TABLE Tm_TimeRawData (
Id INTEGER PRIMARY KEY AUTOINCREMENT, EntryDate DATE, EntryTime TIME ); INSERT INTO Tm_TimeRawData (EntryDate, EntryTime) VALUES ('2025-02-23', '10:51:00.000'), ('2025-02-23', '11:49:00.000'), ('2025-02-23', '12:23:00.000'); |
AW: SQLite SELECT Abfrage mit WHERE auf ein time Feld
Vielen Dank Jaenicke,
das hat mir schonmal weiter geholfen. Nun habe ich es nochmals anders gelöst. An Stelle vom Datum Speichere ich nun auch UNIXTime vom Datum mit Zeit dadurch kann ich sauber suchen. Also DB um ein Feld erweitert inRefDateTime Das sieht dann so aus: Id EntryDate EntryTime RefDate 16429 2025-02-23 10:51:00.000 1740307860 16439 2025-02-23 10:51:00.000 1740307860 16440 2025-02-23 11:39:00.000 1740310740 16441 2025-02-23 11:49:00.000 1740311340 Wobei RefDate dem EntryDate mit der EntryTime entspricht. Damit habe ich eine saubere Lösung die leicht zu Handhaben ist und mich vom nicht wirklich einfachen Umgang mit Date und Time Felder befreit. Danke dennoch für deinen Hint werde ich sich bei anderer Gelegenheit auch mal gebrauchen könne. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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