Selecteren als huidige datum tussen 2 datums ligt
Het eerste deel van onderstaande query werkt. Na de witregel moet ik zien te vertalen naar iets wat SQL begrijpt. Iemand die me op weg kan helpen?
SELECT overnachtingen.plaats AS plaats , overnachtingen.aantal AS aantal , location.veld AS veld FROM overnachtingen INNER JOIN location ON overnachtingen.plaats = location.plaats
WHERE location.veld = $location
AND de huidige datum BETWEEN overnachtingen.aankomst AND overnachtingen.vertrek
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SET @maand = 6;
SELECT orderNumber, orderDate, requiredDate, shippedDate, status, customerNumber FROM orders
WHERE
shippedDate >= orderDate AND
shippedDate <= requiredDate AND
MONTH(orderDate) = @maand AND
status <> 'shipped';
SELECT orderNumber, orderDate, requiredDate, shippedDate, status, customerNumber FROM orders
WHERE
shippedDate >= orderDate AND
shippedDate <= requiredDate AND
MONTH(orderDate) = @maand AND
status <> 'shipped';
Duizende andere voorbeelden zijn te vinden op de interwebs.
Toevoeging op 13/05/2022 13:18:03:
En deze met BETWEEN :
Code (php)
1
2
3
4
5
2
3
4
5
SELECT orderNumber, orderDate, requiredDate, shippedDate, status, customerNumber FROM orders
WHERE
shippedDate BETWEEN orderDate AND requiredDate AND
MONTH(orderDate) = @maand AND
status <> 'shipped';
WHERE
shippedDate BETWEEN orderDate AND requiredDate AND
MONTH(orderDate) = @maand AND
status <> 'shipped';
https://www.google.com/search?q=MySQL+select+date+range
Aernout Nimwegen op 13/05/2022 11:44:46:
waarbij de huidige datum groter is als aankomst en de huidige datum kleiner is als vertrek.
Het is kleiner dan en groter dan, niet kleiner als en groter als.
https://www.beterspellen.nl/website/index.php?pag=17
Aernout Nimwegen op 13/05/2022 11:44:46:
[...] moet ik zien te vertalen naar iets wat SQL begrijpt.
AND de huidige datum BETWEEN overnachtingen.aankomst AND overnachtingen.vertrek
AND de huidige datum BETWEEN overnachtingen.aankomst AND overnachtingen.vertrek
Als je de huidige datum wilt, dan snapt MySQL en MariaDB en PostgreSQL het token CURRENT_DATE, dus dan wordt het:
Maar je zou ook NOW() kunnen gebruiken voor datum én tijd, als je vergelijkt met een datumkolom wordt alleen de datum meegenomen.
Merk op dat MySQL en MariaDB datums en tijd niet goed opslaan. Het hangt af van het uur van de dag dat je de vergelijking doet, of je de gewenste uitkomst krijgt. Dat komt omdat zowel MySQL en MariaDB geen tijdzones opslaan, die laten ze afhangen van de serverconfiguratie waardoor berekeningen soms goed, en soms fout gaan. (Bijvoorbeeld met het verschil tussen wintertijd en zomertijd, dat is ook een tijdzone.)
Wil je een echte database die wel doet wat je verwacht, gebruik dan bij voorkeur PostgreSQL.
Aernout Nimwegen op 13/05/2022 11:44:46:
Ik probeer uit te vogelen hoe ik records kan selecteren waarvan de huidige datum tussen de 2 datums van het record ligt.
INNER JOIN location ON overnachtingen.plaats = location.plaats WHERE CURRENT_DATE > overnachtingen.aankomst
AND CURRENT_DATE < overnachtingen.vertrek AND location.veld = $location"
Dank jullie wel allemaal voor de adviezen en voorbeelden. Het is bovenstaande geworden. En dat werkt voor mij prima. Morgen ga ik bezig om het location.veld=$location gedeelte optioneel te maken, want ik wil ook graag een mogelijkheid hebben om alle velden te selecteren.
De applicatie zit zo in elkaar dat je aankomst en vertrek in één keer registreert. Er is dus nooit een aankomst zonder vertrek.
(Dan ook nog dank voor de les Nederlands. Meestal gaat het goed, soms niet zullen we maar zeggen :-) )
Weet je zeker dat je bij minstens 1 van die datums niet een = wilt hebben?
als je vandaag aankomt en morgen vertrekt:
Vandaag zie de boeking niet, want 15 mei is niet groter dan de 15 mei (aankomst)
Morgen is het 16 mei, dan is het ok wbt de aankomstdatum, maar de vertrek datum is de 16e, dus je gaat hem ook niet vinden.
Alleen bij meerdaagse boekingen zul je hem (een tijdje) vinden), maar niet op de datum van aankomst of vertrek. (tenzij je ook een tijdstip in de kolom vertrek hebt staan