![]() |
Datenbank: MYSQL • Version: 4.x • Zugriff über: zeos
[MYSQL] Geburtstag ermitteln
Hallo zusammen,
ich wende mich nun in meier Verzweiflung mal wieder an euch in der Hoffnung....... hilfe zu finden! Folgende Problemstellung: Ich habe eine Datenbank, in welche sich Benutzer eintragen, inkl. Geburtsdatum! Nun möchte ich diesen Kunden an Ihrem Geburtstag eine E-Mail schicken, bzw. möchte mir Kunden, welche in den nächsten 10 Tagen Geburtstag haben in einer Liste aufzeigen lassen. Jetzt habe ich allerdings 0 Ahnung, wie ich genau diese Kunde per SELECT herausfiltern soll. Vom Prinzip: Geburtstag <= HeutigesDatum+10 UND Geburtstag >= HeutigesDatum Mein Problem sind hier ganz masiv die Jahreszahlen. Wir haben 2006 und im Jahr 1950 hat jemand Geburtstag. Ich hoffe ich konnte euch mein Problem einigermaßen schildern und hoffe nun sehr auf eure Hilfe, wie ein solcher SELECT Befehl aussehen muss. Gruß MAsterBasti |
Re: [MYSQL] Geburtstag ermitteln
Ich würde Geburtstag + Monat in eine andere Spalte als das Jahr schreiben, und dann entsprechende nur auf Tag und Monat prüfen.
Ansonsten einfach id und geburtstag von allen holen, in Delphi berechnen wer Geburtstag hat, und die restlichen Infos bei Bedarf nachholen. |
Re: [MYSQL] Geburtstag ermitteln
Was du natürlich auch machen könntest, wäre mit dem Datum zu rechnen:
Hier: ![]() Da gibt es Informationen über die Datums und Zeitfunktionen von MySQL. Du könntest zum Beispiel etwas derart machen: SELECT * FROM Tabelle WHERE DAYOFYEAR(Geburtstag) BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(CURDATE())+10 Oder du könntest mit DATE_FORMAT dir das Datum in ein passenderes Format bringen und damit rechnen - aber ob das so gut geht weiß ich nicht. Gruß, Dominik |
Re: [MYSQL] Geburtstag ermitteln
Danke erstmal für eure schnellen Antworten:
Habe mir das gerade mal angeschaut und mal durchgetestet....
Delphi-Quellcode:
Fürt leider zum Ergebnis 0 -> Ich habe aber definitiv am 31.01 Geburtstag und müstte egtl. dort auftauchen.... Jemand eine Idee?
Auswertungen.SQL.Text := 'SELECT * FROM kundendaten WHERE DAYOFYEAR(kundendaten.geburtstag) BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(CURDATE())+30';
Auswertungen.Open; showmessage(Inttostr(Auswertungen.RecordCount)); Liegt es evtl. daran, dass das Feld Geburtstag vom Typ varchar ist ? Wenn ja, wie bekomme ich die bisher eingetragenen Daten in ein Date-Format umgewandelt ???? Achja, ganz abgesehen davon, ist oben stehende Lösungsmethode auch nicht Jahresübergreifend oder ? also bekomme ich am 30. Dez nicht angezeigt wer am 6. Januar Geburtstag hat ??? Gruß MasterBasti |
Re: [MYSQL] Geburtstag ermitteln
Also wenn du varchar-Felder hast, kannst du natürlich keine DateTime-Funktionen darauf anwenden. Aber wieso speicherst du Datumsangaben auch als varchar?! :shock:
Wenn du wenig Daten hast, würde ich evtl. mal versuchen einfach eine neue DateTime-Spalte einzufügen, die vorhandenen Daten von Hand rüberschieben und dann die varchar-Spalte löschen und die neue Spalte umbenennen. Wenn du es automatisiert haben möchtest, solltest du dich mit Cast-Funktionen auseinandersetzen. Ein Link dazu: ![]() Alternativ könntest du natürlich die Daten auch nach Delphi einlesen und als DateTime zurück in die Datenbank speichern. Ich weiß nicht genau, wie man das bei MySQL am besten automatisieren kann - nutze MySQL eher nie. Richtig, der Vorschlag funktioniert immer nur innerhalb eines Jahres. Hatte keine Lust zu überlegen, wie man den Jahreswechsel am besten einbaut :-) Aber das sollte über ein OR und dann eine weitere solche (ähnliche) Abfrage machbar sein. |
Re: [MYSQL] Geburtstag ermitteln
Hmmm, soweit funktioniert jetzt alles.... habe mir ein Programm geschrieben, welches die derzeit 600 Datensätze konvertiert hat.
so, nun zum Jahresproblem: Das ist jetzt derzeit meine Select-Anweisung:
SQL-Code:
Jetzt ist die Frage, wie diese erweitert werden muss, damit das Jahr auch berücksichtigt wird, da dayofyear ja nun hier nicht mehr greift.... bzw. wieder bei 1 anfängt....
Auswertungen.SQL.Text := 'SELECT * FROM kundendaten WHERE DAYOFYEAR(kundendaten.geburtstag) BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(CURDATE())+30 ORDER BY DAYOFYEAR(kundendaten.geburtstag) ASC';
Jemand eine Idee ? Ich bin ja schon froh, dass oben stehender Select funktioniert.... Gruß und danke nochmal für eure Hilfe MasterBasti |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 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