Selecteren als huidige datum tussen 2 datums ligt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Aernout Nimwegen

Aernout Nimwegen

13/05/2022 11:44:46
Quote Anchor link
Ik probeer uit te vogelen hoe ik records kan selecteren waarvan de huidige datum tussen de 2 datums van het record ligt. Ik heb een kolom aankomst en een kolom vertrek. Nu wil ik alleen de records zien van degene die nu aanwezig zijn, dus waarbij de huidige datum groter is als aankomst en de huidige datum kleiner is als vertrek.

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
 
PHP hulp

PHP hulp

28/03/2024 23:03:33
 
Adoptive Solution

Adoptive Solution

13/05/2022 12:54:52
Quote Anchor link
Een voorbeeld om orders te volgen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';


Duizende andere voorbeelden zijn te vinden op de interwebs.

Toevoeging op 13/05/2022 13:18:03:

En deze met BETWEEN :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';


https://www.google.com/search?q=MySQL+select+date+range
 
Ad Fundum

Ad Fundum

13/05/2022 23:10:09
Quote Anchor link
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

Als je de huidige datum wilt, dan snapt MySQL en MariaDB en PostgreSQL het token CURRENT_DATE, dus dan wordt het:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  AND CURRENT_DATE BETWEEN overnachtingen.aankomst AND overnachtingen.vertrek

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.
Gewijzigd op 13/05/2022 23:11:14 door Ad Fundum
 
Jan R

Jan R

14/05/2022 09:56:42
Quote Anchor link
Ik zie hier een ander probleem. Hoe kun je zoeken op een veld vertrek als ze nog niet vertrokken zijn?

de where wordt dus volgens mij iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
where aankomst <now() and vertrek is null
 
Ad Fundum

Ad Fundum

14/05/2022 10:57:08
Quote Anchor link
Ik heb het ook overwogen Jan, maar de vragensteller gaf aan dat de datums er al wel zijn.
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.
 
Aernout Nimwegen

Aernout Nimwegen

15/05/2022 22:40:33
Quote Anchor link
"SELECT overnachtingen.plaats AS plaats , overnachtingen.aantal AS aantal , location.veld AS veld FROM overnachtingen
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 :-) )
 
Ivo P

Ivo P

16/05/2022 00:00:25
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
WHERE CURRENT_DATE > overnachtingen.aankomst
AND CURRENT_DATE < overnachtingen.vertrek


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
 
Jan Koehoorn

Jan Koehoorn

21/05/2022 13:48:05
Quote Anchor link
Eens met Ivo. En bovendien kun je dan gewoon BETWEEN gebruiken ipv <= en >=, want BETWEEN is "inclusive" zoals dat heet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT *
FROM overnachtingen
WHERE CURRENT_DATE BETWEEN aankomst AND vertrek
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.