AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Monatsübergang Datumsabfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Monatsübergang Datumsabfrage

Ein Thema von Woyzeck · begonnen am 5. Jan 2010 · letzter Beitrag vom 22. Jan 2010
Antwort Antwort
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#1

Monatsübergang Datumsabfrage

  Alt 5. Jan 2010, 14:35
Datenbank: MySQL • Zugriff über: php
Hallo zusammen,

ich habe ein kleines Problem mit den Datumsfunktionen, die SQL bereitstellt.

Und zwar habe ich eine Art Kalender in einer mySQL-Datenbank liegen. Mehrere Php-Skripts greifen darauf zu und sollen für verschiedene Tage: heute, morgen bzw. Rest der Woche die jeweiligen Einträge anzeigen.

Dies funktioniert im Regelfall auch problemlos... Allerdings kommt es dann zu Problemen, wenn ein Monatsende überschritten wird.

Also wenn heute der 31.01. ist zeigt er bei der Anzeige für morgen oder den Rest der Woche keine Einträge an, obwohl welche in der Datenbank stehen.

Ich denke ich weiß auch, wo das Problem steckt:

SQL-Code:
SELECT ...
 FROM kalender WHERE vonDatum>CURDATE() and vonDatum<(CURDATE()+2) ORDER BY vonDatum
Ich gehe davon aus, dass SQL bei Monatsübergängen nicht in der Lage ist aus 31.01. +2 ein 02.02. machen und stattdessen etwas à la 33.01. generiert.
Eine Lösung, die ich mir überlegt hatte, war alles mit DAYOFYEAR() zu verrechnen. Nur gibt es dann halt das Problem, dass auch Einträge aus dem letzten Jahr mit angezeigt würden.

Fällt euch da eine andere passende Funktion ein, die man benutzen könnte, oder wie würdet ihr die Abfrage gestalten?

MfG Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Monatsübergang Datumsabfrage

  Alt 5. Jan 2010, 14:51
Welchen Typ hat vondatum?
Was passiert, wenn du curdate()+2 wieder explizit in einen Datumstyp umcastest?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#3

Re: Monatsübergang Datumsabfrage

  Alt 5. Jan 2010, 15:02
vonDatum ist vom Typ date. also z.b. 2010-01-05

Das mit dem Casten habe ich in SQL noch nie gemacht. Wie funktioniert das hier?
  Mit Zitat antworten Zitat
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#4

Re: Monatsübergang Datumsabfrage

  Alt 9. Jan 2010, 20:08
mmh, weiß niemand eine Lösung?
Oder kennt jemand zumindest eine Seite, auf der ich mehr zu diesen SQL-Datumsfunktionen finde?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Monatsübergang Datumsabfrage

  Alt 9. Jan 2010, 20:21
Kennt MySQL DateDiff()?
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Monatsübergang Datumsabfrage

  Alt 9. Jan 2010, 20:22
SQL-Code:
SELECT *
FROM kalender
WHERE vonDatum > CURDATE() AND vonDatum < DATE_ADD(CURDATE(), INTERVAL 2 DAY)
ORDER BY vonDatum
  Mit Zitat antworten Zitat
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#7

Re: Monatsübergang Datumsabfrage

  Alt 22. Jan 2010, 16:48
Gibt es dieses DATE_ADD auch für die Vergangenheit? Also z.b. das Datum von vor 7 Tagen?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Monatsübergang Datumsabfrage

  Alt 22. Jan 2010, 18:15
Vielleicht so...
DATE_ADD(CURDATE(), INTERVAL -7 DAY)
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Monatsübergang Datumsabfrage

  Alt 22. Jan 2010, 18:55
Beispiel:
wenn CURDATE() = 31.12.2010
dann ist + 2 = 02.02.2010
daraus ergibt sich für
> 31.01.2010 = 01.02.2010
< 02.02.2010 = 01.12.2010

ergo werden nur Daten für den 01.02.2010 zurückgeliefert.

Dein Statement sollte also simpel mit

SELECT ... FROM kalender WHERE vonDatum=CURDATE()+1; funktionieren. Ansonsten schau dir mal das SQL-Schlüsselwort BETWEEN an.

CU, der Poelser
  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 08:28 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