sql >> Databasteknik >  >> RDS >> Mysql

Mysql Datediff-fråga

Det verkar som att du försöker göra det här:

WHERE specific_date < (NOW() + 5 days)

Först och främst, tänk noga på gränsfallen. Dessa gränsfall kan bita dina anklar i SQL. Vill du verkligen

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

Gör ditt specific_date kolumner tidsstämplar innehåller bara dagar (det vill säga datum med tider lika med midnatt) eller innehåller de datum och tider? Om du ska få de resultat du vill ha måste du vara försiktig med dessa detaljer.

Testa i alla fall detta:

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

Det här är ett bra sätt att göra en sådan sökning. Kolumnvärdet står ensamt på ena sidan av olikhetspredikatet (<=). ) så att mySQL kan göra en skanning av indexintervall om du har ett index i kolumnen.

Datumräkning i MySQL är ganska flexibel. Du kan göra

   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

och så vidare.



  1. Enkelt sätt att läsa enstaka post från MySQL

  2. Hur hämtar man kategorier och underkategorier i en enda fråga i sql? (mysql)

  3. linux mysql-server kan inte hitta mysql_config

  4. Hur man ansluter Struts 2 med Hibernate och PostgreSQL