2011-10-10 2 views
7

Ho bisogno di ottenere il risultato dalla tabella, che la data dovrebbe essere la differenza di 5 dalla data corrente.Mysql Datediff query

ie., specific_date colonna è presente nella mia tabella. Il formato della data è YYYY-MM-DD.

Ho bisogno la query qualcosa di simile,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5 

risposta

6

Sembra che si sta cercando di fare questo:

WHERE specific_date < (NOW() + 5 days) 

Prima di tutto, pensare con attenzione i casi limite. Questi casi limite possono mordere le caviglie in SQL. Ti vuole realmente

WHERE specific_date <= (NOW() + 5 days) 

I tuoi specific_date colonne timestamp contengono solo giorni (vale a dire le date con tempi uguali a mezzanotte) o se invece contengono date e gli orari? Se hai intenzione di ottenere i risultati desiderati, devi fare attenzione a quei dettagli.

In ogni caso, provate questo:

WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY) 

Questo è un buon modo per fare una ricerca. Il valore della colonna si trova da solo su un lato del predicato di disuguaglianza (<=), quindi mySQL può eseguire una scansione dell'indice se si dispone di un indice sulla colonna.

L'aritmetica delle date in MySQL è piuttosto flessibile. È possibile fare

NOW() + INTERVAL 10 SECOND 
    NOW() - INTERVAL 2 MINUTE 
    NOW() + INTERVAL 4 HOUR 
    CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */ 
    LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/ 
    NOW() - INTERVAL 1 QUARTER 
    CURDATE() - INTERVAL 5 YEAR 

e così via.

+0

Sì grazie, ha funzionato. – sathish

+0

Funziona anche con ore? ad esempio: 'WHERE specific_date <= DATE_ADD (NOW(), INTERVAL 24 ORE)' –

+0

Sì, vedere la mia modifica. –

3

Dai un'occhiata alla all'operatore BETWEEN.

expr BETWEEN min AND max 

Un altro modo è quello di utilizzare il DATE_SUB operatore

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)