offers.date = CURDATE()
I cosa ho attualmente.Afferrare dove CURDATE() e il giorno prima con MySQL
Per oggi ci sono offerte, ma vorrei anche ricevere gli ordini per ieri.
Come posso fare questo, senza specificare la data di ieri?
offers.date = CURDATE()
I cosa ho attualmente.Afferrare dove CURDATE() e il giorno prima con MySQL
Per oggi ci sono offerte, ma vorrei anche ricevere gli ordini per ieri.
Come posso fare questo, senza specificare la data di ieri?
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)
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)
mi sembra che sarebbe più semplice dire appena il seguente
WHERE offers.date >= CURDATE() - INTERVAL 1 day
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.
cosa non va bene (CURDATE() - 1): funziona correttamente. –
@ 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