2012-11-26 10 views

risposta

27

Per utilizzare meno CURDATE o, più un intervallo di tempo (ad esempio, ieri) è possibile utilizzare la funzione di DATE_ADD

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

Quindi, nel tuo caso si utilizza in questo modo:

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

Opzionalmente è possibile utilizzare anche la funzione DATE_SUB() e invece di un intervallo negativo utilizzare lo stesso intervallo ma positivo.

Così, DATE_ADD(CURDATE(), INTERVAL -1 DAY) sarebbe diventato DATE_SUB(CURDATE(), INTERVAL 1 DAY)

+0

cosa non va bene (CURDATE() - 1): funziona correttamente. –

+2

@ murtaza.webdev che non funziona in tutte le circostanze: se CURDATE() è il primo di giugno, la sottrazione 1 porta a 0 giugno. Vedi https://bugs.mysql.com/bug.php?id= 3958 – edwardmp

6

Sulla base di @ edwardmp risposta, trovo questa sintassi un po 'più leggibile rispetto all'utilizzo DATE_ADD():

current_date() - interval 1 day 

Inoltre vorrei utilizzare IN invece di OR per rendere più facile per combinare questo con il resto della clausola where senza doversi preoccupare troppo delle parentesi:

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

mi sembra che sarebbe più semplice dire appena il seguente

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

Potrebbe anche essere

offers.date between (current_date() - interval 1 day) and current_date 

NB: che questo fallirà se offers.date è un valore datetime perché (2017-01-02) < (2017-01-02 12:34:56) a causa del fatto che 2017-01-02 è in realtà 2017-01-02 00:00:00.