Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Datediff-Abfrage

Anscheinend versuchen Sie Folgendes:

WHERE specific_date < (NOW() + 5 days)

Denken Sie zunächst sorgfältig über die Grenzfälle nach. Diese Grenzfälle können Ihre Knöchel in SQL beißen. Wollen Sie eigentlich

WHERE specific_date <= (NOW() + 5 days)

Machen Sie Ihr specific_date Spalten-Zeitstempel enthalten nur Tage (d. h. Datumsangaben mit Uhrzeiten gleich Mitternacht) oder enthalten sie Datumsangaben und Uhrzeiten? Wenn Sie die gewünschten Ergebnisse erzielen möchten, müssen Sie auf diese Details achten.

Versuchen Sie es auf jeden Fall so:

WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)

Dies ist eine gute Möglichkeit, eine solche Suche durchzuführen. Der Spaltenwert steht allein auf einer Seite des Ungleichheitsprädikats (der <= ), sodass mySQL einen Indexbereichsscan durchführen kann, wenn Sie einen Index für die Spalte haben.

Die Datumsarithmetik in MySQL ist ziemlich flexibel. Das können Sie tun

   NOW() + INTERVAL 10 SECOND
   NOW() - INTERVAL 2 MINUTE
   NOW() + INTERVAL 4 HOUR
   CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
   LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH  /*first day of present month*/
   NOW() - INTERVAL 1 QUARTER
   CURDATE() - INTERVAL 5 YEAR

und so weiter.