Seleziona i record da NOW () -1 Day


138

Esiste un modo in un'istruzione MySQL per ordinare i record (tramite un timbro data) di> = NOW () -1 in modo da selezionare tutti i record dall'oggi al futuro?

Risposte:


269

A giudicare dalla documentazione per le funzioni di data / ora , dovresti essere in grado di fare qualcosa come:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

come arrivare ora a così via .. significa data corrente per tutti i record che sono disponibili in db. ? questo è solo per un giorno, ma ora ho bisogno di tutti i record per le parole. @jon
Muddasir Abbas,

Considera l'ora locale dell'utente quando i record sono in UTC?
Adry,

1
@Adry: ne dubito, ma dovresti testarlo attentamente.
Jon Skeet,

63

Tieni presente che il risultato potrebbe essere leggermente diverso da quello che ti aspetti.

NOW()restituisce a DATETIME.

E INTERVALfunziona come indicato, ad es INTERVAL 1 DAY = 24 hours.

Quindi, se il tuo script deve essere eseguito su cron 03:00, perderà ilfirst three hours of records from the 'oldest' day .

Per ottenere tutto il giorno usare CURDATE() - INTERVAL 1 DAY. Questo tornerà all'inizio del giorno precedente indipendentemente da quando viene eseguito lo script.


Voto positivo per CURDATE ()
rob



8

Non sono state visualizzate correttamente le risposte utilizzando DATE_ADDo DATE_SUB:

Sottrai 1 giorno da NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

Aggiungi 1 giorno da NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

1

quando il campo di ricerca è il timestamp e vuoi trovare i record di 0 ore ieri e 0 ore oggi usa la costruzione

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

anziché

 now() - interval 1 day
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.