Terug naar de voorpaginaTBForum nu ook op je mobiel!
Klik hier voor meer info en gratis link...

Home Nieuw Vraag & Aanbod Forums Artikelen Bedrijvengids Zoeken

   Verlangen, Alleznet Media
2 jul 2009 11:32 
Weet iemand of er een chique manier is om in mysql zeg maar 10 dagen vooruit te kijken op basis van een geboortedatum (in MySQL opgeslagen als date). Dus stel het is vandaag, en je hebt de volgende mensen in de database:
7-7-1990 Piet
12-9-1991 Jan
5-7-2000 Klaas

In dit geval wil ik dus Piet en Klaas als output krijgen. Iemand een idee hoe dat netjes met 1 query kan? Heb zelf wel een quick-and-dirty oplossing, maar dat is niet echt wat ik zoek.

     Aangepast op 02-07-2009 11:32 door Verlangen
   Tim Colla, Particulier
2 jul 2009 11:40 
Als de geboortedatum een DATE veld is kun je dit doen:
SELECT naam FROM tabel WHERE geboortedatum >= NOW() AND geboortedatum <= DATE_ADD(NOW(), INTERVAL 10 DAY)


edit:
of
SELECT naam FROM tabel WHERE geboortedatum BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 10 DAY)

     Aangepast op 02-07-2009 11:42 door Tim Colla
   Richard O., Particulier
2 jul 2009 12:19 
Neenee, want je moet het jaar weggooien, je wil weten wat de verjaardag is in dit jaar...

De IF() rekent de volgende verjaardag uit (dit jaar als je nog niet jarig bent geweest, volgend jaar als je wel jarig bent geweest)


select voornaam,achternaam,geboortedatum
from mensen
where if(1*date_format(curdate(),'%c%d')>1*date_format(geboortedatum,'%c%d'),
concat(extract(year from curdate())+1,'-',right(geboortedatum,5)),
concat(extract(year from curdate()),'-',right(geboortedatum,5)))
between curdate() and date_add(curdate(), interval 10 day)


Nb ik ga ervanuit dat je geboortedatums in het standaard YYYY-MM-DD MySQL date formaat staan.

     Aangepast op 02-07-2009 12:21 door Richard O.
   Tim Colla, Particulier
2 jul 2009 12:30 
Oh wacht, ik was er niet helemaal bij met m'n hoofd.

   B. van Dorst, Particulier
2 jul 2009 13:06 
Hier staan trouwens enkele nuttige voorbeelden voor het rekenen met verjaardagen etc.:
dev.mysql.com/doc/refman/5.0/en/date-calculations.html

   Verlangen, Alleznet Media
2 jul 2009 13:11 
Bedankt voor het meedenken allemaal. Richard, jouw query werkt inderdaad. Weer wat geleerd

   Stefan K., Particulier
2 jul 2009 16:50 
Richard mag ik je vragen waarom je 1* hebt? Niet om beidehand te doen maar snap ut niet helemaal... Werkt het niet zonder? Of is er een andere rede voor?

   Eelco Luurtsema, Luurtsema IS
2 jul 2009 16:56 
Door *1 te doen zet mysql het denk ik om in een getal, waardoor je de vergelijking < kan doen. Volgens mij wil het ook zonder de *1 maar weet niet zeker.

   Stef Vergoossen, Particulier
2 jul 2009 19:45 
Zal wss inderdaad ook werken zonder. Dit heb je ook vaker nodig in js voor berekeningen.

   Richard O., Particulier
2 jul 2009 21:40 
Gaat niet werken zonder.

De 1* forceert het naar een getal zoals Eelco al zegt. Als je %c%d als strings vergelijkt dan is 20 oktober (1020) voor 2 juli (702) omdat
"1020" < "702" want 1 < 7
. %c geeft namelijk geen 0 voor de maanden die uit 1 cijfer bestaan.

Maar
1*"1020" > 1*"702" want 1020 > 702

Overigens vind ik de manier met right(,5) zoals op dev.mysql.com/doc/refman/5.0/en/date-calculations.html staat een stuk netter dan mijn oplossing. Dan heb je ook de leading zero voor de maanden die maar uit 1 cijfer bestaan en dan omzeil je bovenstaand probleem al.

EDIT date_format met %m ipv %c lost het ook op...

     Aangepast op 02-07-2009 21:41 door Richard O.



 
© Copyright TargetMedia 2001-2010 | Mobile | Premium SMS | Micropayments | Muziek downloaden | Ringtones Bekijk bezoekers statistieken RSS feed