Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL: Zeitraum (https://www.delphipraxis.net/193908-sql-zeitraum.html)

zobien123 22. Sep 2017 09:48

Datenbank: MySql • Version: n.a. • Zugriff über: DbVisualizer

SQL: Zeitraum
 
Hi :)

folgendes Problem: Ich selektiere einen Zeitraum z.B. den August. Die Selektierung funktioniert auch, jedoch einen Tag zu wenig. Wenn ich also von 01.08.2017 - 31.08.2017 mach, fehlen mir die Daten vom 31.08.. Wenn ich das "bis" Datum ein Tag länger mach (01.09.2017) habe ich alle Daten bis zum 31.08.

Code:
...
WHERE tb1.datetime BETWEEN UNIX_TIMESTAMP(:DATUM_VON) AND UNIX_TIMESTAMP(:DATUM_BIS)
Habe es auch schon anstatt dem BETWEEN mit >= & <= versucht -> selbes Ergebnis.

Jasocul 22. Sep 2017 09:52

AW: SQL: Zeitraum
 
Der Klassiker?

Steht im Timestamp-Feld die Uhrzeit mit drin?
Falls ja, ist deine Between-Vorgabe im "bis" Bereich zu klein, da dort vermutlich nur das Datum mit Uhrzeit 00:00:00 steht. Jede Sekunde später ist größer.

mkinzler 22. Sep 2017 09:53

AW: SQL: Zeitraum
 
In einem Timestamp ist ja auch die Urzeit vorhanden. Fehlt diese bedeutet das dann 0 Uhr. deshalb muss du entweder einen Tag hinzufügen oder halt um die Uhrzeit "23:59" ergänzen.

zobien123 22. Sep 2017 10:00

AW: SQL: Zeitraum
 
Achsooooooo, jetzt macht es Sinn :-D

Okay, gibt es irgendwie eine Funktion oder muss ich die Uhrzeit irgendwie da noch "hinschummeln" bzw das BIS_DATUM um ein Tag erhöhen? :-D

zobien123 22. Sep 2017 10:03

AW: SQL: Zeitraum
 
Okay mit ADDDATE() kann man Tage hinzufügen und auch entfernen.

Delphi-Quellcode:
WHERE tb1.datetime BETWEEN UNIX_TIMESTAMP(:DATUM_VON) AND UNIX_TIMESTAMP(ADDDATE(:DATUM_BIS, 1))

Vielen Dank für eure Hilfe :)

TigerLilly 22. Sep 2017 11:08

AW: SQL: Zeitraum
 
Aufpassen auf den Zeitanteil. Wenn DATUM_VON zB 12.3.2016 11:15 ist, fallen alle Sätze vom 12.3. Mit kleinerer Uhrzeit nicht hinein.

Besser ist es dann, den Zeitanteil auszublenden und mit >= bzw < Datum+1 Tag zu arbeiten.

generic 22. Sep 2017 11:16

AW: SQL: Zeitraum
 
Zitat:

Zitat von mkinzler (Beitrag 1381821)
In einem Timestamp ist ja auch die Urzeit vorhanden. Fehlt diese bedeutet das dann 0 Uhr. deshalb muss du entweder einen Tag hinzufügen oder halt um die Uhrzeit "23:59" ergänzen.

Naja, dann wird 23:59:01 nicht erwischt. Wir haben ja auch Sekunden, Millisekunden und Microsekunden usw.
Wie fein löst das DB-Systen auf?


Zitat:

01.09.2017 habe ich alle Daten bis zum 31.08.
Bei diesen Problem frage ich im "bis ab" kleiner als nächsten Tag um die kleinste Zeit Fraktion mit zu erwischen.

Datum>='01.09.2017' and Datum<('31.08'+1 Tag)

Jumpy 22. Sep 2017 13:50

AW: SQL: Zeitraum
 
Zitat:

Zitat von zobien123 (Beitrag 1381824)
Okay mit ADDDATE() kann man Tage hinzufügen und auch entfernen.
Delphi-Quellcode:
WHERE tb1.datetime BETWEEN UNIX_TIMESTAMP(:DATUM_VON) AND UNIX_TIMESTAMP(ADDDATE(:DATUM_BIS, 1))

Bei Between ist immer die Frage, ob der Randbereich mitzählt oder nicht (in Oracle Ja). Deswegen in dem Fall vllt. besser mit >= und < arbeiten. oder die Uhrzeit im gesuchten Feld abschneiden, in Oracle ginge das mit Trunc z.B. so:
SQL-Code:
WHERE Trunc(tb1.datetime) BETWEEN UNIX_TIMESTAMP(:DATUM_VON) AND UNIX_TIMESTAMP(:DATUM_BIS)

zobien123 22. Sep 2017 14:11

AW: SQL: Zeitraum
 
Danke für die Tipps habe es nun noch auf >= < anstatt dem BETWEEN geändert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz