AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: Zeitraum

Ein Thema von zobien123 · begonnen am 22. Sep 2017 · letzter Beitrag vom 22. Sep 2017
Antwort Antwort
zobien123

Registriert seit: 3. Mär 2017
Ort: Öhringen
94 Beiträge
 
Delphi 10.3 Rio
 
#1

SQL: Zeitraum

  Alt 22. Sep 2017, 09:48
Datenbank: MySql • Version: n.a. • Zugriff über: DbVisualizer
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.
Jörn
Linux wird nie das meistinstallierte Betriebssystem sein, wenn man bedenkt, wie oft man Windows neu installieren muss!
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 09:52
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.
Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 09:53
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.
Markus Kinzler
  Mit Zitat antworten Zitat
zobien123

Registriert seit: 3. Mär 2017
Ort: Öhringen
94 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 10:00
Achsooooooo, jetzt macht es Sinn

Okay, gibt es irgendwie eine Funktion oder muss ich die Uhrzeit irgendwie da noch "hinschummeln" bzw das BIS_DATUM um ein Tag erhöhen?
Jörn
Linux wird nie das meistinstallierte Betriebssystem sein, wenn man bedenkt, wie oft man Windows neu installieren muss!
  Mit Zitat antworten Zitat
zobien123

Registriert seit: 3. Mär 2017
Ort: Öhringen
94 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 10:03
Okay mit ADDDATE() kann man Tage hinzufügen und auch entfernen.

WHERE tb1.datetime BETWEEN UNIX_TIMESTAMP(:DATUM_VON) AND UNIX_TIMESTAMP(ADDDATE(:DATUM_BIS, 1))
Vielen Dank für eure Hilfe
Jörn
Linux wird nie das meistinstallierte Betriebssystem sein, wenn man bedenkt, wie oft man Windows neu installieren muss!

Geändert von zobien123 (22. Sep 2017 um 10:07 Uhr) Grund: Code hinzugefügt
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 11:08
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.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#7

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 11:16
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)
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 13:50
Okay mit ADDDATE() kann man Tage hinzufügen und auch entfernen.
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:
WHERE Trunc(tb1.datetime) BETWEEN UNIX_TIMESTAMP(:DATUM_VON) AND UNIX_TIMESTAMP(:DATUM_BIS)
Ralph
  Mit Zitat antworten Zitat
zobien123

Registriert seit: 3. Mär 2017
Ort: Öhringen
94 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: SQL: Zeitraum

  Alt 22. Sep 2017, 14:11
Danke für die Tipps habe es nun noch auf >= < anstatt dem BETWEEN geändert.
Jörn
Linux wird nie das meistinstallierte Betriebssystem sein, wenn man bedenkt, wie oft man Windows neu installieren muss!
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:31 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