2009-11-11 16 views
53

Stavo giocando con MySQL e so che c'è un comando di limite che mostra una certa quantità di risultati, ma mi chiedevo se MySQL da solo può mostrare solo gli ultimi 3 giorni o qualcosa del genere. Mi stavo solo chiedendo.MySQL SELECT ultimi giorni?

Aggiornamento: Ho usato NOW() per memorizzare i tempi.

+0

@Doug, si prega di dare un po 'più informazioni. In che modo i tuoi record calcolano il tempo DATETIME, DATE, TIMESTAMPs, i timestamp di epoca, ecc.? Vuoi gli ultimi tre giorni da oggi (CURRENT_DATE() - INTERVAL 3 DAYS) o dal record più recente? Etc. – pilcrow

risposta

115

Utilizza la data e tre giorni fa:

WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL -3 DAY); 

Consultare la documentazione DATE_ADD.

Oppure si può usare:

WHERE t.date >= (CURDATE() - INTERVAL 3 DAY) 
+3

"WHERE t.date> = (CURDATE() - INTERVAL 3 DAY)" dovrebbe essere sufficiente –

+0

MOLTO INTERESSANTE! Ho provato a farlo funzionare con DATE_ADD e ha continuato a fallire a causa della sintassi. Tuttavia, ha funzionato senza DATE_ADD, quindi ho usato solo 'CURDATE() - INTERVAL 3 DAY'. Perché? – Strawberry

+1

L'ho eseguito tramite phpmyadmin se questo fa la differenza. – Strawberry

2

È possibile utilizzare una combinazione della funzione UNIX_TIMESTAMP() per farlo.

SELECT ... FROM ... WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(thefield) < 259200 
+1

@Turnor, attenzione, i giorni non sempre consistono di 86.400 secondi, cosa con secondi bisestili e risparmio di luce del giorno. – pilcrow

+0

Vero. Ma è raro che tu abbia bisogno di quel livello di precisione, e non suona come la domanda originale ha fatto. – Turnor

+0

@pilcrow Tenendo presente questo, come faresti ad affrontare la domanda allora? –

-2

WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL '-3' DAY);

citazioni uso sul valore di -3

9

È possibile utilizzare questo in MySQL clausola WHERE per restituire i record che sono stati creati nel corso dell'ultimo 7 giorni/settimana:

created >= DATE_SUB(CURDATE(),INTERVAL 7 day)

Utilizzare anche NOW() nella sottrazione per fornire la risoluzione hh: mm: ss. Quindi, per restituire i record creati esattamente (al secondo) negli ultimi 24 ore, si potrebbe fare:

created >= DATE_SUB(NOW(),INTERVAL 1 day)

-2
SELECT DATEDIFF(NOW(),pickup_date) AS noofday 
FROM cir_order 
WHERE DATEDIFF(NOW(),pickup_date)>2; 

o

SELECT * 
FROM cir_order 
WHERE cir_order.`cir_date` >= DATE_ADD(CURDATE(), INTERVAL -10 DAY) 
Problemi correlati