Mit Datum rechnen (mySQL; ggf. php)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Mit Datum rechnen (mySQL; ggf. php)

Beitrag von Wuppi »

Hi

ich hab da ein Problemchen. Einen Ansatz hab ich wohl schon, aber mir fällt das Umsetzen etwas schwer: https://dev.mysql.com/doc/refman/5.1/en ... n_date-sub

Ich habe in einer DB ein Datum im Format (Typ char(10)) yyyy-mm-dd.
a) Jetzt möchte ich vom HEUTIGEN Datum ALLE suchen die z.b. 34 Jahre alt sind

Code: Alles auswählen

SELECT curdate() - INTERVAL 34 year;
klappt nicht. Also nicht ganz.
Ich bin 34 Jahre und 1977-10-12 geboren. Der code gibt mir aber 1978-16-04 aus. Klar ... er schaut halt exakt heute vor 34 Jahren - da fall ich natürlich nicht drunter.

Lösung? Es müssen natürlich ALLE Angezeigt werden die 34 Jahre sind ... ob 34,00 (heute Geb) oder 34,99 (quasi morgen Geb => 35)

Mir wurde spontan auch

Code: Alles auswählen

select * from irgendeinetabelle WHERE DATE_SUB(CURDATE(),INTERVAL 34 YEAR) <= geburtstag
angeboten. Aber da bekomm ich überhaupt kein Ergebnis.

b)
Ich suche einen Zeitrahmen. Wer ist alles 28-34 Jahre alt. (also 28,00 bis 34,99)

Gruß
Wuppi
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Mit Datum rechnen (mySQL; ggf. php)

Beitrag von Dr.Death »

Hi,

könntest du dann nicht mit der WHERE Klausel: "BETWEEN date AND date2" arbeiten?

http://www.plus2net.com/sql_tutorial/date-lastweek.php

Code: Alles auswählen

select * from irgendeinetabelle WHERE geburtstag BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 35 YEAR ) AND DATE_SUB( CURDATE( ) ,INTERVAL 34 YEAR )
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Re: Mit Datum rechnen (mySQL; ggf. php)

Beitrag von Wuppi »

Hi

danke schon mal ;)

k.a. warum - sorry bei Datumsangaben setzt meine Fähigkeit zu Denken leicht aus *G* ... daher hau ich meine Gedanken mal eben rein:

Also grob übersetzt:
1. DATE_SUB( CURDATE( ) ,INTERVAL 35 YEAR ) => Heute - 35j = 17.04.1977
2. DATE_SUB( CURDATE( ) ,INTERVAL 34 YEAR ) => Heute - 34j = 17.04.1978

Somit bringt mir dieser code alle User die 34j sind ... und EINEN 35jährigen der 77 geboren wurde und heute Geburtag hat.

Jetzt müsste ich das ganze aber zu einer Range machen: "Zeige mir alle User die zwischen 27(.00) und 34(.99) Jahre sind.

1. DATE_SUB( CURDATE( ) ,INTERVAL 34 YEAR ) => Heute - 35j = 17.04.1977
2. DATE_SUB( CURDATE( ) ,INTERVAL 27 YEAR ) => Heute - 27j = 17.04.1985

Auch hier gäbe es wieder Fehlerhafte User .. 17.04.1977 passt mit 35 nicht in die Range.

Das Problem liese sich lösen indem ich das erste CURDATE um +1 erhöhe:

Code: Alles auswählen

select * from irgendwas WHERE geburtstag BETWEEN DATE_SUB( CURDATE()+1 ,INTERVAL 35 YEAR ) AND DATE_SUB( CURDATE() ,INTERVAL 27 YEAR )
Hab ich das richtig verstanden?
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Mit Datum rechnen (mySQL; ggf. php)

Beitrag von Dr.Death »

TIAS ;-)


Try it and see
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Re: Mit Datum rechnen (mySQL; ggf. php)

Beitrag von Wuppi »

uff ...

war mit dem schreiben schon wieder schneller als mit dem denken - aber ja - jetzt klappt es.

Ich muss das "bis"-Jahr bei der suche um eins erhöhen und curdate() um einen Tag.

Jetzt scheint es zu klappen ;)
Antworten

Zurück zu „Coding & Technik“