Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Monatsübergang Datumsabfrage (https://www.delphipraxis.net/145630-monatsuebergang-datumsabfrage.html)

Woyzeck 5. Jan 2010 14:35

Datenbank: MySQL • Zugriff über: php

Monatsübergang Datumsabfrage
 
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

Stevie 5. Jan 2010 14:51

Re: Monatsübergang Datumsabfrage
 
Welchen Typ hat vondatum?
Was passiert, wenn du curdate()+2 wieder explizit in einen Datumstyp umcastest?

Woyzeck 5. Jan 2010 15:02

Re: Monatsübergang Datumsabfrage
 
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?

Woyzeck 9. Jan 2010 20:08

Re: Monatsübergang Datumsabfrage
 
mmh, weiß niemand eine Lösung?
Oder kennt jemand zumindest eine Seite, auf der ich mehr zu diesen SQL-Datumsfunktionen finde?

mkinzler 9. Jan 2010 20:21

Re: Monatsübergang Datumsabfrage
 
Kennt MySQL DateDiff()?

omata 9. Jan 2010 20:22

Re: Monatsübergang Datumsabfrage
 
SQL-Code:
SELECT *
FROM kalender
WHERE vonDatum > CURDATE() AND vonDatum < DATE_ADD(CURDATE(), INTERVAL 2 DAY)
ORDER BY vonDatum

Woyzeck 22. Jan 2010 16:48

Re: Monatsübergang Datumsabfrage
 
Gibt es dieses DATE_ADD auch für die Vergangenheit? Also z.b. das Datum von vor 7 Tagen?

omata 22. Jan 2010 18:15

Re: Monatsübergang Datumsabfrage
 
Vielleicht so...
SQL-Code:
DATE_ADD(CURDATE(), INTERVAL -7 DAY)

Poelser 22. Jan 2010 18:55

Re: Monatsübergang Datumsabfrage
 
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

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

CU, der Poelser


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 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