Toon posts:

[MySQL] datum range selecteren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

ik heb een tabel met een hoop datums in en ik wil een geselecteerde datum nemen (dynamisch), maar ook de datums die er maximaal 2 dagen voor en 2 dagen erna liggen.

ik dacht dat het zo op te lossen:
code:
1
select dat from bla where (dat = '2008-05-04' or (dat = '2008-05-04' + INTERVAL 2 DAY) or (dat = '2008-05-04' - INTERVAL 2 DAY))


Maar als je dit doet dan worden niet de datums er tussen in genomen, maar de exacte datums 2 dagen ervoor en 2 dagen erna, dus
2008-05-02
2008-05-04
2008-05-06

Iemand een idee hoe ik dit het best oplos?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Datum converteren naar unix timestamp en zowel van start- als eind datum ook de timestamps berekenen. Vervolgens kun je een simpele where uitvoeren (start_timestamp <= dat && dat <= end_timestamp). Waarbij start_timestamp en end_timestamp de conversies voorstellen van je datums.

If it isn't broken, fix it until it is..


  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08-2025
Kijk eens naar de mysql functie DATE_DIFF
edit:

Ik heb even verder gekeken omdat ik zelf ook wel benieuwd was naar een correcte manier:

SQL:
1
2
3
4
5
6
7
8
9
10
SELECT `datum` FROM `bla`
WHERE `datum`
BETWEEN (
'2008-05-04' - INTERVAL 2
DAY
)
AND (
'2008-05-04' + INTERVAL 2
DAY
)


de datum 2008-05-04 kun je natuurlijk dynamisch maken!

Het is niet vereist om datums om te zetten naar unix timestamps. Dit is ook een optie, maar waarom moeilijk doen als het makkelijk kan :)

[ Voor 91% gewijzigd door steffex op 27-02-2008 10:34 ]


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik wist niet dat mysql een between operator had. Ik ken hem eigenlijk alleen uit Microsoft SQL Server en Oracle. Toen ik nog in PHP programmeerde (PHP 3 + MySQL 3) moest ik altijd op deze manier datum ranges selecteren.

If it isn't broken, fix it until it is..


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het kan ook zonder between. `kolom` >= eerste datum AND `kolom` <= tweede datum is natuurlijk exact hetzelfde. ;)

[ Voor 7% gewijzigd door Voutloos op 27-02-2008 11:40 ]

{signature}


Verwijderd

Topicstarter
Thanks!

Verwijderd

Niemand_Anders schreef op woensdag 27 februari 2008 @ 11:00:
Ik wist niet dat mysql een between operator had. Ik ken hem eigenlijk alleen uit Microsoft SQL Server en Oracle. Toen ik nog in PHP programmeerde (PHP 3 + MySQL 3) moest ik altijd op deze manier datum ranges selecteren.
Voor zover ik weet zat 't "between" keyword al in de SQL89 standaard, dus bijna 20 jaar geleden. Dan mag je toch wel aannemen dat een zichzelf respecterend RDBMS dat nu wel ondersteunt...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het zat er iig al voor 4.0.5 in ;)
http://dev.mysql.com/doc/...ors.html#operator_between :Y)

edit:
En in 3.21 ook al
:)

[ Voor 45% gewijzigd door RobIII op 28-02-2008 00:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1