AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [MYSQL] Geburtstag ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

[MYSQL] Geburtstag ermitteln

Offene Frage von "MasterBasti"
Ein Thema von MasterBasti · begonnen am 9. Jan 2006 · letzter Beitrag vom 9. Jan 2006
Antwort Antwort
MasterBasti

Registriert seit: 3. Jun 2004
22 Beiträge
 
#1

[MYSQL] Geburtstag ermitteln

  Alt 9. Jan 2006, 15:58
Datenbank: MYSQL • Version: 4.x • Zugriff über: zeos
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
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: [MYSQL] Geburtstag ermitteln

  Alt 9. Jan 2006, 16:05
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#3

Re: [MYSQL] Geburtstag ermitteln

  Alt 9. Jan 2006, 16:17
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
  Mit Zitat antworten Zitat
MasterBasti

Registriert seit: 3. Jun 2004
22 Beiträge
 
#4

Re: [MYSQL] Geburtstag ermitteln

  Alt 9. Jan 2006, 17:18
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
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#5

Re: [MYSQL] Geburtstag ermitteln

  Alt 9. Jan 2006, 19:12
Also wenn du varchar-Felder hast, kannst du natürlich keine DateTime-Funktionen darauf anwenden. Aber wieso speicherst du Datumsangaben auch als varchar?!

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.
  Mit Zitat antworten Zitat
MasterBasti

Registriert seit: 3. Jun 2004
22 Beiträge
 
#6

Re: [MYSQL] Geburtstag ermitteln

  Alt 9. Jan 2006, 20:43
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:
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
  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:30 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