Dag en maand
Om maar een hier gebezigde uitspraak aan te halen: "het is hier geen afhaalchinees". Dit forum moet echt af van het simpelweg faciliteren, je mag antwoorden best onderbouwen. Ik denk dat mijn argumenten voor mijn aanpak duidelijk zijn.
Ik kijk op een iets grotere afstand naar het vraagstuk: welke informatievraag wil je beantwoord zien? "Ik wil alle informatie tussen twee datums". En toevallig is dat nu de huidige dag en en einde van de maand, maar dit kan op den duur best iets anders zijn. Als je het niet nodig hebt, maakt het niet zoveel uit welke aanpak je kiest. Als je het wel nodig hebt, dan heb je profijt van een generieke(re) aanpak en hoef je niet opnieuwe queries open te breken.
Er is niets mis met defensief programmeren.
@Thomas, En nog steeds serveert SQL niet de laatste datum (31-10-2019) :-)
Is het echt een DATETIME of een DATE? Zou niet de eerste keer zijn dat naamgeving misleidend is.
BETWEEN a AND b is van en met a tot en met b voor zover ik weet.
Michael - op 08/10/2019 23:43:26:
@Thomas, En nog steeds serveert SQL niet de laatste datum (31-10-2019) :-)
Zie ook niet hoe LAST_DAY() dat dan wel oplost?
Daarnaast zie ik ook niet hoe dat alles wat ik eerder heb gezegd zou invalideren.
Gewijzigd op 08/10/2019 23:57:09 door Thomas van den Heuvel
Het is een DATETIME.
Dan kun je doen wat @Rob voorstelt. Je kunt het rekenwerk nog steeds prima in PHP doen, er verandert verder ook niets aan de argumentatie.
Ja, bedankt!
Het "voordeel" hiervan is dat deze intervallen als LEGO-stenen op elkaar aansluiten. Als je bijvoorbeeld een ander interval hebt van (en met) B tot (en zonder) C, dan vormen deze intervallen samen een naadloos geheel.
Je zou dus ook kunnen gaan voor het volgende in plaats van BETWEEN, maar dit is equivalent met de eerdere oplossing:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$dt = new DateTime();
// these dates can be... anything really
$intervalStart = $dt->format('Y-m-d'); // today
$intervalEnd = $dt->modify('first day of next month')->format('Y-m-d'); // first day of next month
$sql =
"SELECT event_id, datumtijd
FROM sportevenementen
WHERE '".$intervalStart."' <= datumtijd
AND datumtijd < '".$intervalEnd."'
ORDER BY datumtijd ASC";
echo $sql;
?>
$dt = new DateTime();
// these dates can be... anything really
$intervalStart = $dt->format('Y-m-d'); // today
$intervalEnd = $dt->modify('first day of next month')->format('Y-m-d'); // first day of next month
$sql =
"SELECT event_id, datumtijd
FROM sportevenementen
WHERE '".$intervalStart."' <= datumtijd
AND datumtijd < '".$intervalEnd."'
ORDER BY datumtijd ASC";
echo $sql;
?>