Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [MYSQL] Geburtstag ermitteln (https://www.delphipraxis.net/60575-%5Bmysql%5D-geburtstag-ermitteln.html)

MasterBasti 9. Jan 2006 14:58

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

DGL-luke 9. Jan 2006 15:05

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.

sir-archimedes 9. Jan 2006 15:17

Re: [MYSQL] Geburtstag ermitteln
 
Was du natürlich auch machen könntest, wäre mit dem Datum zu rechnen:

Hier: http://dev.mysql.com/doc/refman/5.0/...functions.html

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

MasterBasti 9. Jan 2006 16:18

Re: [MYSQL] Geburtstag ermitteln
 
Danke erstmal für eure schnellen Antworten:
Habe mir das gerade mal angeschaut und mal durchgetestet....

Delphi-Quellcode:
Auswertungen.SQL.Text := 'SELECT * FROM kundendaten WHERE DAYOFYEAR(kundendaten.geburtstag) BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(CURDATE())+30';
Auswertungen.Open;

showmessage(Inttostr(Auswertungen.RecordCount));
Fürt leider zum Ergebnis 0 -> Ich habe aber definitiv am 31.01 Geburtstag und müstte egtl. dort auftauchen.... Jemand eine Idee?

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

sir-archimedes 9. Jan 2006 18:12

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:
http://dev.mysql.com/doc/refman/5.0/...functions.html

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.

MasterBasti 9. Jan 2006 19:43

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:
Auswertungen.SQL.Text := 'SELECT * FROM kundendaten WHERE DAYOFYEAR(kundendaten.geburtstag) BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(CURDATE())+30 ORDER BY DAYOFYEAR(kundendaten.geburtstag) ASC';
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....

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 14:56 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