2012-11-26 2 views

Antwort

27

Um CURDATE minus oder plus ein Intervall (zB gestern) verwenden, können Sie die DATE_ADD Funktion

SELECT DATE_ADD(CURDATE(), INTERVAL -1 DAY); 

Also, in Ihrem Fall, dass Sie es wie folgt verwenden verwenden:

WHERE offers.date = CURDATE() OR offers.date = DATE_ADD(CURDATE(), INTERVAL -1 DAY) 

Optional können Sie Verwenden Sie auch die Funktion DATE_SUB() und verwenden Sie anstelle eines negativen Intervalls dasselbe Intervall, aber positiv.

So DATE_ADD(CURDATE(), INTERVAL -1 DAY)DATE_SUB(CURDATE(), INTERVAL 1 DAY)

+0

was ist falsch (CURDATE() - 1): es funktioniert gut. –

+2

@ murtaza.webdev, die nicht unter allen Umständen funktioniert: Wenn CURDATE() der erste Juni ist, würde das Subtrahieren von 1 zu 0 June führen. Siehe https://bugs.mysql.com/bug.php?id= 3958 – edwardmp

6

Aufbauend auf @ edwardmp Antwort werden würde, finde ich diese Syntax etwas besser lesbar als DATE_ADD() mit:

current_date() - interval 1 day 

Auch würde ich IN statt OR verwenden, um es einfacher zu machen um dies mit dem Rest Ihrer where-Klausel zu kombinieren, ohne sich um die Klammern Gedanken machen zu müssen:

WHERE offers.date in (current_date(), current_date() - interval 1 day) 
6

scheint mir, wie es einfacher wäre, die folgende

WHERE offers.date >= CURDATE() - INTERVAL 1 day 
0

Es ist auch

zu sagen, nur
offers.date between (current_date() - interval 1 day) and current_date 

NB sein könnte: dass dies fehlschlagen, wenn offers.date ein Datetime-Wert ist, weil (2017-01-02) < (2017-01-02 12:34:56) aufgrund der Tatsache 2017-01-02 ist eigentlich 2017-01-02 00:00:00.

Verwandte Themen